縦スクロールSTGを作っているのですが、さすがにcでは、
asmに比べて速度が遅い事を痛感させられました。
さて、質問なのですが、ゲームオーバー画面で"GAME OVER"とスプライトで表示したいのですが、
どうしても、うまくいきません。具体的には、STARTキーを押していないのに、スプライトが
x=255,y=255に移動してしまいます。どうしてでしょうか?
追記:今度はゲームオーバーが消えなくなりました
// メイン関数 char NesMain() { char r; const char string[/url] = "PRESS START!"; const char string2[/url] = "STG SAMPLE01 "; const char palettes[/url] = { 0x0f, 0x11, 0x21, 0x30, 0x0f, 0x11, 0x21, 0x30, 0x0f, 0x11, 0x21, 0x30, 0x0f, 0x11, 0x21, 0x30, 0x0f, 0x00, 0x10, 0x21, 0x0f, 0x0f, 0x10, 0x21, 0x0f, 0x09, 0x19, 0x21, 0x0f, 0x15, 0x27, 0x30 }; char GameMode=TITLE; char y=0; char i; char prev=0; char cnt=0; Init(0); back: GameMode=TITLE; r=*(char*)0x2002; if(r>0) goto back; Init(1); ShowScreen(0); // パレットを書き込み *(char*)0x2006 = 0x3f; *(char*)0x2006 = 0x00; for (i = 0; i < 0x20; i ++) *(char*)0x2007 = palettes; // ネームテーブルへ書き込み *(char*)0x2006 = 0x21; *(char*)0x2006 = 0xc9; for (i = 0; i < 16; i ++) *(char*)0x2007 = string2; //BGwrite(15,10,"STG SAMPLE01 "); *(char*)0x2006 = 0x22; *(char*)0x2006 = 0x09; for(i=0;i<16;i++) { *(char*)0x2007 = string; } //BGwrite(17,10,"PRESS START!"); SetScroll(0, 0); ShowScreen(1); while(1){ // メインループ KeyInput(); switch(GameMode) { case TITLE: Title(&GameMode); break; case OPTION: break; case GAME: if(PauseFlag==0 && GameMode==GAME) { y--; } SetScroll(0, y); MainLoop(); HitCheck2(&GameMode); break; case GAMEOVER: if((Pad & START)){cnt++;if(cnt>5){cnt=0;GameOverX=255;GameOverY=255; goto back;}} break; } prev=(Pad & START); } return 0; }
あっ、一応ネットカフェからの書き込みなので、ご注意を。