since : 2001.11.1 Junk Shop
DataSlim2's Room
RexDKで、データスリム2のアドインを作る。
ゲームの初期画面と終了処理を作成します。
まず、初期画面から作成します。
ゲームタイトルを表示し、開始ボタンと終了ボタンをstart_init()と言う関数名で作成します。
void start_init(void){ DsClearScreen(); //画面と登録イベントの消去 DsPrintfe(60,50,0,"a Cockroach Hunter"); //タイトル表示 //スタートボタンをID 0x80で作成 DsDialogTextButton(40,80,60,16,0x80,"Start"); //終了ボタンをID 0x50で作成 DsDialogTextButton(140,80,60,16,0x50,"End"); }
これをエミュレータで実行すると、「Bad address:00400000」と怒られてしまいます。
どうやら、DsClearScreen();に異常が有るようなので、DsClearScreen();の代わりに次のように記載しました。
DsEventClear(); DsDisplayBlockClear(0,0,240,120);
これを実行すると次のような画面になります。
次に終了処理が行えるようにします。
DsAddinTerminate();
を実行すればアドインを終了しますが、終了前の画面の状態等が残ったまま終了してしまいます。
そこで、DsEventClear();
及びDsDisplayBlockClear(0,0,240,120);
と併記しますが終了処理自体あちこちから呼び出す可能性が多いので、addin_end()
と言う関数にしておきます。
void addin_end(void){ DsEventClear(); //登録イベントの消去 DsDisplayBlockClear(0,0,240,120); //画面の消去 DsAddinTerminate(); //アドインの終了 }
今回作成した関数をmain()
関数から呼び出せるように、main()
関数を変更します。
void main(void){
int y;
start_init(); //追加 初期画面の呼び出し
while(1){
DsEventMessageGet(msg);
switch (msg.message){
//追加
case MSG_DS_COMMAND: //作成したボタンをタップした時の処理
if (msg.sCode==MSG_DS_COMMAND_DOWN){
switch (msg.bCode){
case 0x80: //イベントID0x80の時の処理
DsEventClear();
DsDisplayBlockClear(0,0,240,120);
break;
case 0x50: //イベントID0x50の時の処理
addin_end();
break;
}
}
break;
case MSG_DS_KEY_DOWN:
switch (msg.sCode){
case KEY_TOP_C:
addin_end(); //追加
break;
case KEY_ENTER_A:
y = (rand()%5)*20;
Tmove(y,1);
break;
}
}
}
}
まだゲームとして成り立ちませんが、これでアドインが終了できるようになりました。
Copyright 2001-2002 Hideo Morotomi