どうしても、ゲームオーバー画面になりません。
Posted: 2009年11月17日(火) 15:25
NES(海外のファミコンの事)プログラミングしているTKOZです。
縦スクロールSTGを作っているのですが、さすがにcでは、
asmに比べて速度が遅い事を痛感させられました。
さて、質問なのですが、ゲームオーバー画面で"GAME OVER"とスプライトで表示したいのですが、
どうしても、うまくいきません。具体的には、STARTキーを押していないのに、スプライトが
x=255,y=255に移動してしまいます。どうしてでしょうか?
追記:今度はゲームオーバーが消えなくなりました
あっ、一応ネットカフェからの書き込みなので、ご注意を。
縦スクロール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;
}あっ、一応ネットカフェからの書き込みなので、ご注意を。