れーすのエグゼ流星Blog

エグゼとゲームと雑記

エグゼ解析したりゲーム作ったりいろいろ。

GBAプログラミング 3日目

取組んだ内容

tutorial.3

ビットマップモード

 

やってみたこと

1.png画像を出力してみる

 

// 画像の読み込み

Mode3DrawImage((u16*)&imageBitmap);

f:id:rai17321:20180524133602j:plain

読み込ませるときの処理がよくわからない。

チュートリアル3のフォルダを流用し、gritで画像をGBA用に変換したものを読み込ませようとしたら、どうやらどこかの処理で画像をGBA用に変換、インポートまでしてくれてるみたいだ。(tut3/res)

楽っちゃ楽だけど、仕組みをきちんと知りたさがある。

 

 

2.四角形の描画をしてみる

f:id:rai17321:20180524142928j:plain

 

#include "lib/gba.h"#include "lib/gba.h"
//---------------------------------------------------------------------------

void WaitForVsync(void)

{ while (*(vu16*)0x4000006 >= 160) {};

while (*(vu16*)0x4000006 <  160) {};}

//---------------------------------------------------------------------------

void Mode3PutPixel(u32 x, u32 y, u16 col){

u16* ScreenBuffer = (u16*)0x6000000; ScreenBuffer[y * 240 + x] = col;}

//---------------------------------------------------------------------------

// モード3で四角形を塗りつぶすvoid Mode3DrawBox(u32 sx, u32 sy, u32 ex, u32 ey, u16 col){ u32 x, y;
for (y = sy; y<ey; y++) { for (x = sx; x<ex; x++) { Mode3PutPixel(x, y, col); } }}int main(void){ // モード設定 SetMode(MODE_3 | BG2_ENABLE);
// ドットの描画 u32 sx = 50; u32 sy = 50; u32 ex = 150; u32 ey = 150; u16 col = RGB5(31, 31, 31);
Mode3DrawBox(sx,sy,ex,ey,col);

for (;;) { WaitForVsync(); }
}

 

はてなソースコードの貼り付けするとインデント消えるのかよ!!!!!!!

 

DXlibでの描画と対して変わらない。

2つの頂点を設定することで描画を実現している。(sx,sy & ex,ey)

 

やってて思いましたが、UnityはDXlibを楽にしたもので、DXlibはこのような古典的なゲームプログラミングを楽にしたもの、このゲームプログラミングもアセンブリを楽にしたものなんじゃないかな。