時間による出現
投稿者 : taba(YahooBB219051012048.bbtec.net)
- 2005/03/13(Sun) 11:15
No.7855
|
|
|
|
|
何分かたったら敵を出す オブジェクトがとまりボスを出す。 倒したら元に戻すという処理が 分かりません。 ifとtimeを使うと思って 色々試したのですができませんでした。 どうか教えてください。
|
Re: 時間による出現
投稿者 : ごま太郎(i60-35-28-199.s02.a001.ap.plala.or.jp)
- 2005/03/13(Sun) 12:47
No.7856
|
|
|
|
変数timeを使うとします。 tonyuは標準で1/60秒の頻度で情報を更新しています。 んなわけで、 while(1) { time++; update(); } と書いた場合、timeが六十になった時点で約1秒が経過したことになるわけです。 ただし、動作状況によって多少の差異が生まれるため、ピッタシうん秒と決めることはできません。 てなわけで、一分経ったら動き始めるオブジェクトの例を書いてみます。 while(1) { time++; if (time>3600) { //ここに、動き出した時のプログラムを書く //******* //******* } update(); }
で、倒したら元に戻すってのは、「倒したら画面から一度消えて、再度どっかで現れる(マリオの踏み潰した敵キャラ)」のか、「倒しても画面から消えないでまた一分間動きを止めている」のかで方法が変わります。
最初の場合は素直にdie()させてください。あとでappear()させれば全ての値は初期化されるので特に手を加えないでも構いません。
二つ目の場合、倒したらtimeを0に戻すことでできます。 while(1) { time++; if (time>3600) { //ここに、動き出した時のプログラムを書く //******* //******* if (倒されたら) time=0;//←ここが追加部分 } update(); } これで、倒されたらまた一分間静止します。
具体的な動きが分かればもっといい方法もあると思いますが、とりあえず基本はこんな感じです。
|
Re: 時間による出現
投稿者 : taba(YahooBB219051012048.bbtec.net)
- 2005/03/13(Sun) 16:15
No.7857
|
|
|
|
ボスを出したいので一度だけ出現させ、 たおしたら普通の敵を出現させるように したいのです。
|
Re: 時間による出現
投稿者 : ごま太郎(i60-42-43-228.s02.a001.ap.plala.or.jp)
- 2005/03/14(Mon) 18:01
No.7866
|
|
|
|
while(1) { time++; if (time==3600) { appear(new boss(x,y,p)); }else { appear(new enemy(x,y,p)); } update(); } シンプルにいったので、実装すると雑魚のあたりがかなりヤバくなります^^;
|
Re: 時間による出現
投稿者 : taba(YahooBB219051012048.bbtec.net)
- 2005/03/16(Wed) 19:14
No.7875
|
|
|
|
書き込んでみたのですが 普通に出る敵も出なくなり、 しかも何分たっても でてきませんでした。 プログラムは以下の通りです。
extends SpriteChar; function appearEnemy() { if (rnd(200)==0 && $XP>100&&$XP<450) appear(new Enemy(x,y,$pat_Qf+0)) ; if (rnd(95)==0 && $XP<250) appear(new ekuso(x,y,$pat_Qf+7)) ; if (rnd(400)==0 && $XP>400) appear(new earo(x,y,$pat_Qf+1)) ; if (rnd(450)==0 && $XP>500) appear(new jana(x,y,$pat_Qf+2)) ; if (rnd(200)==0 && $XP>250&&$XP<1000) appear(new ekuso(x,y,$pat_Qf+7)) ; if (rnd(320)==0 && $XP>450) appear(new Enemy(x,y,$pat_Qf+0)) ; if (rnd(900)==0 && $XP>1000) appear(new jana(x,y,$pat_Qf+2)) ; if (rnd(850)==0 && $XP>700) appear(new gta(x,y,$pat_Qf+32)) ; if (rnd(750)==0 && $XP>500) appear(new fanntomu(x,y,$pat_Qf+33)) ; if (rnd(700)==0 ) appear(new jimenn(x,y,$pat_Qf+16)) ; if (rnd(3000)==0 && $XP>1000&&$XP<3000) appear(new jimenn(x,y,$pat_Qf+35)) ; if (rnd(2000)==0 && $XP>800) appear(new hebi(x,y,$pat_QAj+23)) ; while(1) { while(x<$screenWidth-20) { x=x+3; appearEnemy(); update(); } while(x>20) { x=x-3; appearEnemy(); }
update(); }
ここをこうすれば処理が楽だというのも できたらおしえてください; お願いします。
|
Re: 時間による出現
投稿者 : ごま太郎(i219-165-135-163.s02.a001.ap.plala.or.jp)
- 2005/03/17(Thu) 21:46
No.7880
|
|
|
|
extends SpriteChar; function appearEnemy() { if (rnd(200)==0) appear(new Enemy(x,y,$pat_Qf+0)) ; //以下省略 } while(1) { if (x<$screenWidth-20) x=x+3; if (x>20) x=x-3; appearEnemy(); update(); } このプログラム的には間違っていません。 ちなみに、whileをifに直したのはこのほうが処理が早いからです。update()とwhile()は呼び出す数が多いほど処理が極端に重くなります。
普通の敵が現れなくなったのは、$XP>1000&&$XP<3000などの部分に問題があるのだと思われます。
で、このプログラムだと分などはまったく関係なくなります。時間を計る変数がないことが原因です。
extends SpriteChar; function appearEnemy() { //説明は上のレスを参照。変数timeが3600になったらボス出現。それ以外では普通の敵が現れる time++; if (time==3600) appear(new BOSS(x,y,$pat_○○)) ; else { if (rnd(200)==0) appear(new Enemy(x,y,$pat_Qf+0)) ; //以下省略 } } while(1) { if (x<$screenWidth-20) x=x+3; if (x>20) x=x-3; appearEnemy(); update(); } で、注意点。 BOSSというクラスを作成するか、あらかじめ作成されているボスキャラ用のクラスにappear(new BOSS(x,y,$pat_○○))のBOSSは変更しておきましょう(クラスって分かりますか?)。
それから、appear(new BOSS(x,y,$pat_○○))のx,yってのを放っておくとこのプログラムを書いたオブジェクトの座標から敵が飛び出してきます。 このままでも動作はするので、後回しでいいですが出現させたい位置の座標にしておくことをお勧めします。
…プログラムのテストしてないので、動作保障がなかったり^^;;;
|
Re: 時間による出現
投稿者 : ごま太郎(i220-220-178-238.s02.a001.ap.plala.or.jp)
- 2005/03/18(Fri) 14:31
No.7886
|
|
|
|
Re: 時間による出現
投稿者 : taba(YahooBB219051012048.bbtec.net)
- 2005/03/19(Sat) 22:16
No.7889
|
|
|
|
|