誘導弾&BGM
投稿者 : アッキー(p2167-ipad33fukuokachu.fukuoka.ocn.ne.jp)
- 2004/08/31(Tue) 19:03
No.6977
|
|
|
|
|
質問ばかりしてすみません。 誘導弾を作りたいのですが、検索&FAQ等を見ても分かりません。 二つ目は、効果音を再生させると、音が重なった状態になるのですが、どうすれば、よいのでしょうか?なるべく短いプログラムでお願いします。
|
Re: 誘導弾&BGM
投稿者 : ごま太郎(i219-167-130-118.s02.a001.ap.plala.or.jp)
- 2004/08/31(Tue) 22:23
No.6978
|
|
|
|
シューティングとアクションは苦手なのでなんですが…。 //tama.tonyu while(1) { if ($jiki.x<x) x--; if ($jiki.x>x) x++; if ($jiki.y<y) y--; if ($jiki.y>y) y++; update(); } 上が誘導弾。
効果音が重なるのは、マシンスペックのせいです。 二度目からはきれいに再生されることが多いですが、ダメな時は効果音をできる限り軽いものに代えてください。 ここらへんの扱いづらさはTonyuユーザーの宿命です(汗)
|
Re: 誘導弾&BGM
投稿者 : アッキー(p4173-ipad04fukuokachu.fukuoka.ocn.ne.jp)
- 2004/09/01(Wed) 12:01
No.6982
|
|
|
|
あの、自機から発射するタイプを作りたいのですが・・・
while(1) { if ($jiki.x<x) x--; if ($jiki.x>x) x++; if ($jiki.y<y) y--; if ($jiki.y>y) y++; update(); } では、複数の敵の前では、誘導してくれなかったような気がします。 ※教えてもらう側がダメ出ししてすみません。
|
Re: 誘導弾&BGM
投稿者 : hkr(gta.kinet-tv.ne.jp)
- 2004/09/01(Wed) 13:14
No.6983
|
|
|
|
Teki=敵のクラス名 です。 //追いかける処理 では、 if(t.x>x) x+=s;(sはスピード) if(t.x<x) x-=s;(〃) if(t.y>y) y+=s;(〃) if(t.y<y) y-=s;(〃) か a=angle(t.x-x,t.y-y);(※1) x+=cos(a)*s;(sはスピード) y+=sin(a)*s;(〃) (角度がおかしい場合は、※1のセミコロンの前に+90や-90を書き足してみてください。) のどちらかを入れてください。上は45度単位で移動して、下は敵の方向に進みます。
では、プログラムです。 //最初に追いかける敵を決めておくタイプ d=9999999;//適当に大きな数値を入れておく for(t in $chars){ if(t is Teki && dist(t.x-x,t.y-y)<d) d=dist(t.x-x,t.y-y); } while(1){ //追いかける処理 //その他処理 update(); }
//常に一番近い敵を追いかけるタイプ while(1){ d=9999999;//適当に大きな数値を入れておく for(t in $chars){ if(t is Teki && dist(t.x-x,t.y-y)<d) d=dist(t.xx,t.y-y); } //追いかける処理 //その他処理 update(); }
|
Re: 誘導弾&BGM
投稿者 : アッキー(p5073-ipad32fukuokachu.fukuoka.ocn.ne.jp)
- 2004/09/01(Wed) 16:40
No.6984
|
|
|
|
やってみましたが、うまく追跡してくれません。 extends DXChar; while(1){ d=9999999;//適当に大きな数値を入れておく for(t in $chars){ if(t is hokam && dist(t.x-x,t.y-y)<d) d=dist(t.x-x,t.y-y); } a=angle(t.x-x,t.y-y); x+=cos(a)*s; y+=sin(a)*s; //追いかける処理 //その他処理 update(); } であってますよね? あと、複数のクラスの場合でも可能ですか? できればこの記事の http://tonyu.kake.info.waseda.ac.jp/joyful/joyful.cgi?mode=res&no=3190 サンプルの3208みたいにしたいんですけど・・・ 要求が多くてすみません。
|
Re: 誘導弾&BGM
投稿者 : N@N(actkyo087042.adsl.ppp.infoweb.ne.jp)
- 2004/09/02(Thu) 00:52
No.6992
|
|
|
|
3208作者です。 teki1とteki2のどちらかで、自機にもっとも近いものを追尾するtamaの例です。
@自機の、弾を発射する部分を、
d=9999999;//適当に大きな数値を入れておく for(t in $chars){ if((t is teki1 || t is Teki2) && dist(t.x-x,t.y-y)<d){ d=dist(t.x-x,t.y-y); target=t; } } app=new tama(x,y,p); app.target=target; appear(app);
とします。
Atamaを、 target=target; while(1){ spd+=0.05;//加速率 angle=angle(target.x-x,target.y-y)+90;//絶対外れない //angle+=angleDiff(angle,angle(target.x-x,target.y-y)-90)/50;//旋回率低下 y-=spd*cos(angle); x+=spd*sin(angle); //当たり判定・消滅処理を入れてください。
update(); }
のように書きます。
敵が多い場合、親クラスを設定すると良いかもしれません。
|
すみません
投稿者 : アッキー(p2058-ipad02fukuokachu.fukuoka.ocn.ne.jp)
- 2004/09/02(Thu) 16:25
No.6996
|
|
|
|
何度もすみません。 弾 extends DXChar; target=target; while(1){ spd+=0.05;//加速率 angle=angle(target.x-x,target.y-y)+90;//絶対外れない //angle+=angleDiff(angle,angle(target.x-x,target.y-y)-90)/50;//旋回率低下 y-=spd*cos(angle); x+=spd*sin(angle); //当たり判定・消滅処理を入れてください。
update(); }
自機 extends DXChar; //サプライトキャラ 弾の種類=1; //変数"弾の種類"を1に設定する $map.setBGColor(color(0,200,255)); // 背景色を設定 while(1) { if (getkey(39)&& $map.getAt(x+16,y)!=$pat_map1+2) { {x+=4;vx=15;} f=0; } // カーソルキー右が押されたら右へ移動
if (getkey(37)&& $map.getAt(x-16,y)!=$pat_map1+1) { {x+=-4;vx=-15;}
f=1; } // カーソルキー左が押されたら左へ移動
if (getkey(40)) vy=6; if (getkey(38)) vy=-6;
y+=vy; // vy: y 方向の速度。 yにvy を加える if ($map.getAt(x,y+20)==$pat_map1+0 ) { // ブロックに当たっていたら vy=0; // 落下速度を0にする if (getkey(88)) vy=-10; // スペースキーを押したらジャンプ } else { // ブロックに当たっていなかったら vy+=0.5; // 落下速度を上げる }
$map.scrollTo(x-$screenWidth/2,0);
if (getkey(90)==1 && 弾の種類==1) { nobj=appear(new Tama(x,y-10,$pat_pata+17)); {$mplayer.play($se_banwav);} // nobjが、new Tama(x,y,$pat_sample)によって新規作成したオブジェクトを参照するようになる。 nobj.vx=vx; // 新しいオブジェクトの変数vxを指定 nobj.vy=vy; // 新しいオブジェクトの変数vyを指定 } if (getkey(90)==1 && 弾の種類==2) { nobj=appear(new Tama2(x,y-10,$pat_pata+18)); // nobjが、new Tama(x,y,$pat_sample)によって新規作成したオブジェクトを参照するようになる。 nobj.vx=vx; // 新しいオブジェクトの変数vxを指定 nobj.vy=vy; // 新しいオブジェクトの変数vyを指定 } if (getkey(90)==1 && 弾の種類==3) { nobj=appear(new Tama4(x,y-10,$pat_pata+20)); // nobjが、new Tama(x,y,$pat_sample)によって新規作成したオブジェクトを参照するようになる。 nobj.vx=vx; // 新しいオブジェクトの変数vxを指定 nobj.vy=vy; // 新しいオブジェクトの変数vyを指定 } d=9999999;//適当に大きな数値を入れておく for(t in $chars){ if((t is hokam || t is teki1 || t is abrams || t is rate ) && dist(t.x-x,t.y-y)<d){ d=dist(t.x-x,t.y-y); target=t; } } if (getkey(90)==1 && 弾の種類==4) app=new tama5(x,y,p); app.target=target; appear(app); }
update(); }
とすると、↑のupdate();の所でエラーになってしまいます。 どうすればよいのでしょうか? 本当に何度もすみません。
|
Re: 誘導弾&BGM
投稿者 : アッキー(p4147-ipad30fukuokachu.fukuoka.ocn.ne.jp)
- 2004/09/02(Thu) 21:52
No.7000
|
|
|
|
やっぱり人に頼らず自分で解決することにしました。 教えていただき、有難う御座います。
|
Re: 誘導弾&BGM
投稿者 : N@N(actkyo122186.adsl.ppp.infoweb.ne.jp)
- 2004/09/03(Fri) 01:12
No.7001
|
|
|
|
シンプルなミスですので、報告だけしておきます。
if (getkey(90)==1 && 弾の種類==4){//←この{が抜けています。
カッコの数の過不足は、エラーの中で最も多い物の一つだと思います。エディタの「全体をインデント」ボタンを押すとチェックできます。
|
Re: 誘導弾&BGM
投稿者 : アッキー(p5063-ipad31fukuokachu.fukuoka.ocn.ne.jp)
- 2004/09/03(Fri) 14:10
No.7003
|
|
|
|
おお!こりゃ恥ずかし・・・ ご指摘ありがとうございます。
|
|