トップページ > 過去ログ > 記事閲覧
ちかちかする
名前:K 日時: 2008/09/08 08:33

14歳から始めるC言語で、4章の自機画像を差し替えたところ、3コマ目の終了時に一瞬画像が消えてしまいます。どうすればちかちかをなくせますか?

Page: 1 |

Re: ちかちかする ( No.1 )
名前:管理人 日時:2008/09/16 10:36

うーん、書籍の内容を見る限りではちらつくことはなさそうですが・・・ 宜しければ現状の jichara.cpp の中身をこちらの掲示板に貼り付けて頂けないでしょうか?
Re: ちかちかする ( No.2 )
名前: 日時:2008/09/20 13:07

すみません。返事くださったのに、すぐに書き込めませんでした! これが中身なのですが、どうでしょうか... #include "spgame.h" int jikibmp[3]; int jitamabmp; void JicharaLoad(){ LoadDivGraph("jiki2.bmp",3,3,1,48,58,jikibmp); jitamabmp = LoadGraph("tama2.bmp"); } void JicharaInit(){ jikidata.ghandle = jikibmp; jikidata.animpat = 3; jikidata.x=310; jikidata.y=410; jikidata.image_w = 52; jikidata.image_h = 53; jikidata.bounds_w = 20; jikidata.bounds_h = 20; jikidata.amode = A_NORMAL; for(int i=0; i<3; i=i+1) { jitama[i].ghandle = & jitamabmp; jitama[i].animpat = 1; jitama[i].image_w = 26; jitama[i].image_h = 59; jitama[i].bounds_w = 23; jitama[i].bounds_h = 56; jitama[i].amode = A_NORMAL; } } void JicharaMove(){ //自キャラ移動 int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); if(key & PAD_INPUT_UP) jikidata.y = jikidata.y-idouryou[4]; if(key & PAD_INPUT_DOWN) jikidata.y = jikidata.y+idouryou[4]; if(key & PAD_INPUT_LEFT) jikidata.x = jikidata.x-idouryou[4]; if(key & PAD_INPUT_RIGHT) jikidata.x = jikidata.x+idouryou[4]; int a = animcounter /6 & jikidata.animpat; DrawGraph(jikidata.x,jikidata.y,jikidata.ghandle[a], TRUE); } void JitamaMove(){ int key =GetJoypadInputState(DX_INPUT_KEY_PAD1); if( (key & PAD_INPUT_A) && (trigger == 0) ){ for(int i=0; i<3; i=i+1){ if (jitama[i].life == 0){ jitama[i].life = 1; jitama[i].x = jikidata.x+12; jitama[i].y = jikidata.y-20; break; } } trigger = 20; } if(trigger>0) trigger = trigger - 1; for(int i=0; i<3; i=i+1){ if(jitama[i].life > 0){ jitama[i].y = jitama[i].y - idouryou[10]; DrawGraph(jitama[i].x,jitama[i].y,*(jitama[i].ghandle),TRUE); //画面外に出た時の処理 if(jitama[i].y<0) jitama[i].life = 0; } } } int IsAtari(CharaData *a, CharaData *b){ int retval = 0; int ax1 = a->x + (a->image_w - a->bounds_w)/2; int ay1 = a->y + (a->image_h - a->bounds_h)/2; int ax2 = a->x + (a->image_w + a->bounds_w)/2; int ay2 = a->y + (a->image_h + a->bounds_h)/2; int bx1 = b->x + (b->image_w - b->bounds_w)/2; int by1 = b->y + (b->image_h - b->bounds_h)/2; int bx2 = b->x + (b->image_w + b->bounds_w)/2; int by2 = b->y + (b->image_h + b->bounds_h)/2; if( (ax1<bx2) && (bx1<ax2) && (ay1<by2) && (by1<ay2) ){ switch (a->amode){ case A_NORMAL: a->life = 0; break; case A_HARD: a->life = a->life -1; break; } switch (b->amode){ case A_NORMAL: b->life = 0; break; case A_HARD: b->life = b->life -1; break; } retval = 1; } return(retval); } int AtariHantei(){ for(int i=0; i<50; i=i+1){ if(tekidata[i].life>0 && tekidata[i].amode !=A_GHOST){ if(IsAtari(&jikidata,&tekidata[i])==1) return(1); for(int j=0; j<3; j=j+1){ if(jitama[j].life > 0 && tekidata[i].amode !=A_GHOST){ IsAtari(&jitama[j],&tekidata[i]); } } } } return(0); }
Re: ちかちかする ( No.3 )
名前:管理人 日時:2008/09/22 06:58

今手元に書籍が無いので見比べることができませんが、 アニメーションパターンを決定する式って int a = animcounter /6 & jikidata.animpat; でしたっけ? とりあえず、jikidata.animpat が 3 の状態で上記の式を 実行すると、結果として a に代入される値は 0〜3 となり、 4個のアニメーションパターンが必要になります なので、& ではなく % にすればちかちかすることはなくなると思います int a = animcounter /6 % jikidata.animpat;

Page: 1 |