無題
投稿者 : T.K(softbank219008150071.bbtec.net)
- 2007/02/04(Sun) 18:43
No.10881
|
|
|
|
|
質問なんですけど 自機からボムを出そうとしているのに出ませんどうしてでしょう 自機のソース extends SpriteChar;
function onDie() { appear(new Bomb($mycher.x , $mycher.y ,$pat_Sample+4)); } function appearbom() { appear(new bom(x,y,$pat_bom+12)); }
if($zikisentaku==3){ while(1) { bomkazu=0; for (t in $chars) { if ( t is bom ) bomkazu=1; } // drawSprite($mycher.x, $mycher.y,$pat_Sample+0); $mycher.p=$pat_Sample+0; if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0 ) x=x-3; if (getkey(40)>0 && y<358 ) y=y+3; if (getkey(38)>0 && y>100 ) y=y-3; if (getkey(160)==1 && bomkazu==0 && $BOMsuu<-1 ) appearbom(); if (getkey(32)==1 && $ta==1){ appear(new Tama(x,y,$pat_Sample+1));} if (getkey(32)==1 && $ta==2){ appear(new Tama(x,y,$pat_Sample+1)); appear(new Tama(x+10,y,$pat_Sample+1));} if (getkey(32)==1 && $ta>2){ appear(new Tama(x,y,$pat_Sample+1)); appear(new Tama(x+10,y,$pat_Sample+1)); appear(new Tama(x-10,y,$pat_Sample+1));} if (getkey(32)>0 && $ta>100){ appear(new Tama(x,y,$pat_Sample+1)); appear(new Tama(x+10,y,$pat_Sample+1)); appear(new Tama(x-10,y,$pat_Sample+1));} for (t in $chars) { if ( t is tekitama && crashTo(t) ) { t.die();//当たった弾を消す $life--;//lifeを一つ減らす break;//ひとつ弾があたったらforループを抜ける
} if ( t is aitemu && crashTo(t) ) { t.die();//当たった弾を消す $life=$life+1; break;//ひとつ弾があたったらforループを抜ける
} if ( t is aitemu2 && crashTo(t) ) { t.die();//当たった弾を消す $ta=$ta+1; break;//ひとつ弾があたったらforループを抜ける
} }
if($life<1)die();//自機死亡
update(); } } if($zikisentaku==2){ while(1) { bomkazu=0; for (t in $chars) { if ( t is bom ) bomkazu=1; } // drawSprite($mycher.x, $mycher.y,$pat_Sample+10); $mycher.p=$pat_Sample+10; if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0 ) x=x-3; if (getkey(40)>0 && y<358 ) y=y+3; if (getkey(38)>0 && y>100 ) y=y-3; if (getkey(160)==1 && bomkazu==0 && $BOMsuu<-1) appearbom(); if (getkey(32)==1 && $ta==1){ appear(new Tama(x,y,$pat_Sample+1));} if (getkey(32)==1 && $ta==2){ appear(new Tama(x,y,$pat_Sample+1)); appear(new Tama(x+10,y,$pat_Sample+1));} if (getkey(32)==1 && $ta>2){ appear(new Tama(x,y,$pat_Sample+1)); appear(new Tama(x+10,y,$pat_Sample+1)); appear(new Tama(x-10,y,$pat_Sample+1));} if (getkey(32)>0 && $ta>100){ appear(new Tama(x,y,$pat_Sample+1)); appear(new Tama(x+10,y,$pat_Sample+1)); appear(new Tama(x-10,y,$pat_Sample+1));} for (t in $chars) { if ( t is tekitama && crashTo(t) ) { t.die();//当たった弾を消す $life--;//lifeを一つ減らす break;//ひとつ弾があたったらforループを抜ける
} if ( t is aitemu && crashTo(t) ) { t.die();//当たった弾を消す $life=$life+1; break;//ひとつ弾があたったらforループを抜ける
} if ( t is aitemu2 && crashTo(t) ) { t.die();//当たった弾を消す $ta=$ta+1; break;//ひとつ弾があたったらforループを抜ける
} }
if($life<1)die();//自機死亡
update(); } } if($zikisentaku==1){ while(1) { bomkazu=0; for (t in $chars) { if ( t is bom ) bomkazu=1; } // drawSprite($mycher.x, $mycher.y,$pat_Sample+9); $mycher.p=$pat_Sample+9; if (getkey(39)>0 && x<$screenWidth ) x=x+5; if (getkey(37)>0 && x>0 ) x=x-5; if (getkey(40)>0 && y<358 ) y=y+2; if (getkey(38)>0 && y>100 ) y=y-2; if (getkey(160)==1 && bomkazu==0 && $BOMsuu<-1) appearbom(); if (getkey(32)==1 && $ta==1){ appear(new Tama(x,y,$pat_Sample+1));} if (getkey(32)==1 && $ta==2){ appear(new Tama(x,y,$pat_Sample+1)); appear(new Tama(x+10,y,$pat_Sample+1));} if (getkey(32)==1 && $ta>2){ appear(new Tama(x,y,$pat_Sample+1)); appear(new Tama(x+10,y,$pat_Sample+1)); appear(new Tama(x-10,y,$pat_Sample+1));} if (getkey(32)>0 && $ta>100){ appear(new Tama(x,y,$pat_Sample+1)); appear(new Tama(x+10,y,$pat_Sample+1)); appear(new Tama(x-10,y,$pat_Sample+1));} for (t in $chars) { if ( t is tekitama && crashTo(t) ) { t.die();//当たった弾を消す $life--;//lifeを一つ減らす break;//ひとつ弾があたったらforループを抜ける
} if ( t is aitemu && crashTo(t) ) { t.die();//当たった弾を消す $life=$life+1; break;//ひとつ弾があたったらforループを抜ける
} if ( t is aitemu2 && crashTo(t) ) { t.die();//当たった弾を消す $ta=$ta+1; break;//ひとつ弾があたったらforループを抜ける
} }
if($life<1)die();//自機死亡
update(); } }
どうしてでしょう?
|
Re: 無題
投稿者 : 昔の人(actkyo069016.adsl.ppp.infoweb.ne.jp)
- 2007/02/05(Mon) 02:01
No.10882
|
|
|
|
さきほどのスレッドではプロジェクト全体を添付されていましたが、 このように冗長になるのと、自機以外に原因がある可能性も考えると、 やはりプロジェクト全体を添付したほうが早く解決に結びつくと思います。
お尋ねの件に関しては、ボム自体に問題がないとすれば、ボムの生成を妨げる可能性のある部分は if (getkey(160)==1 && bomkazu==0 && $BOMsuu<-1 ) appearbom(); このif文の条件でしょう。 ・getKeyについて、私のキーボードでは左右シフトの識別はできています。念のためgetKey(16)でも試されたでしょうか。 ・bomkazuは、生成したbomが消えないとずっと1のままですが、そもそも最初から生成しないので関係ないでしょう。 ・$BOMsuuのコントロールが気がかりです。この変数を扱っているオブジェクトの、処理順序などを調べてみてください。 もしくは、この条件を消してみて正常に動作するようなら、この条件が不具合の原因であったといえます。
一つひとつの命令の意味を把握しながらプログラミングすると、混乱が少なくて済みます。
|
Re: 無題
投稿者 : T.K(softbank219008150071.bbtec.net)
- 2007/02/05(Mon) 09:26
No.10884
|
|
|
|
10884.zip
問題点をまとめときます ・スコアが増え続ける ・ボムが出ない
FILEを送付しておきます
|
Re: 無題
投稿者 : 昔の人(actkyo069016.adsl.ppp.infoweb.ne.jp)
- 2007/02/05(Mon) 12:44
No.10885
|
|
|
|
10885.zip
スコアが増えつづける: Enemy、UFO、tuyoiなどのオブジェクト内に、 for (t in $chars) { if ( t is bombakuha && crashTo(t) ) die(); $score=$score+10; } このような部分が多数残っています。 すべて、 for (t in $chars){ if ( t is bombakuha && crashTo(t) ){ die(); $score=$score+10; } } のように{}内に$score=$score+□;を収めなければ、毎フレームごとにスコアが加算されてしまいます。 一部修正しましたが、まだ残っています。検索で探し出し、すべて修正してください。
ボムが出ない: $BOMsuuは残りボム数と思われるので、このように分かりやすくしました。 if (getkey(16)==1 && bomkazu==0 && $BOMsuu>=1) appearbom(); この$BOMsuuの初期値は、スタート画面だけに表示されるtop2オブジェクト内で設定しています。 stage2以降もbomは発射されますが、$pat_bomをキャラクタパターンに加え忘れているため、表示されていません。 この点を修正しました。
|
Re: 無題
投稿者 : T.K(softbank219008150071.bbtec.net)
- 2007/02/05(Mon) 13:56
No.10887
|
|
|
|
ボムにしてからおかしくなりました・・
extends SpriteChar; function onDie() { appear(new tuyoi2(x , y ,$pat_maze+10)); } function appearUFO() { if (rnd(50)==0) appear(new UFO(x,y+30,$pat_Sample+3)); }
while(1) { while(x<$screenWidth) { for (t in $chars) { if ( t is Tama && crashTo(t) ){//← die(); $score=$score+200;} } for (t in $chars) { if ( t is bombakuha && crashTo(t) ){ die(); $score=$score+200; } } x=x+5; if($life==0) wait(); appearUFO(); update(); } while(x>0) { for (t in $chars) { if ( t is bombakuha && crashTo(t) ){//← die(); $score=$score+200; } } x=x-5; if($life==0) wait(); for (t in $chars) { if ( t is Tama && crashTo(t) ){ die(); $score=$score+200;} } appearUFO(); update(); } } なぜか死んでもtuyoi2をロードしてくれません どうしてでしょう?
|
Re: 無題
投稿者 : 昔の人(actkyo069016.adsl.ppp.infoweb.ne.jp)
- 2007/02/06(Tue) 00:02
No.10890
|
|
|
|
tuyoiのwhile(1) {の前の行にprint("t1"); tuyoi2のwhile(1) {の前の行にprint("t2"); tuyoi3のwhile(1) {の前の行にprint("t3"); を書いて実験してみました。
コンソールには t1 t2 t3 と表示されます。 tuyoi2、tuyoi3は生成してますが、出現場所に弾が残っているために、生成から1フレームで当たり判定されてしまうようです。
それぞれのwhile(1) {の前の行にupdateEx(10);(10フレームその場で停止)を加えると、 弾が通り過ぎるまで当たり判定を実行しないため、tuyoi2、tuyoi3がちゃんと現れてくれました。
|
Re: 無題
投稿者 : T.K(softbank219008150071.bbtec.net)
- 2007/02/06(Tue) 18:05
No.10898
|
|
|
|
|