上下左右
投稿者 : suraimu(YahooBB218113076013.bbtec.net)
- 2004/08/28(Sat) 21:17
No.6945
|
|
|
|
|
ランダムにオブジェクトを上下左右に動かすにはどうすればいいのでしょうか。
|
Re: 上下左右
投稿者 : suraimu(YahooBB218113076013.bbtec.net)
- 2004/08/28(Sat) 21:19
No.6946
|
|
|
|
すみません プログラムを添付しわすれていました。 extends SpriteChar;
vx=2; // 進行方向 a=newAnimation(); // AnimationAdapterを作成 a.loop($pat_NKAjV+0,$pat_NKAjV+4,10); // 敵の2つのパターンを往復するアニメーション while (1) { if ($map.getAt(x+vx,y)==$pat_+0) { // 進行方向のマップパターンを調べ、ブロックのパターンだったら a.pause(); // 待機前にアニメーションを止める updateEx(30); // 30フレーム待機 a.resume(); // 待機後にアニメーション再開 vx=-vx; // 進行方向を反転する } x+=vx; // 進行方向へ進む if (vx<0) f=1; else f=0; // vx が負(左向き)なら反転 while (1) { if ($map.getAt(y+vy,x)==$pat_Block+0) { // 進行方向のマップパターンを調べ、ブロックのパターンだったら updateEx(30); // 30フレーム待機 vy=-vy; // 進行方向を反転する } y+=vy; // 進行方向へ進む update(); } } この状態では上下左右にも動かずアニメーションだけうごきます。
|
Re: 上下左右
投稿者 : suraimu(YahooBB218113076013.bbtec.net)
- 2004/08/28(Sat) 21:24
No.6947
|
|
|
|
すみません プログラムを添付しわすれていました。 extends SpriteChar;
vx=2; // 進行方向 a=newAnimation(); // AnimationAdapterを作成 a.loop($pat_NKAjV+0,$pat_NKAjV+4,10); // 敵の2つのパターンを往復するアニメーション while (1) { if ($map.getAt(x+vx,y)==$pat_+0) { // 進行方向のマップパターンを調べ、ブロックのパターンだったら a.pause(); // 待機前にアニメーションを止める updateEx(30); // 30フレーム待機 a.resume(); // 待機後にアニメーション再開 vx=-vx; // 進行方向を反転する } x+=vx; // 進行方向へ進む if (vx<0) f=1; else f=0; // vx が負(左向き)なら反転 while (1) { if ($map.getAt(y+vy,x)==$pat_Block+0) { // 進行方向のマップパターンを調べ、ブロックのパターンだったら updateEx(30); // 30フレーム待機 vy=-vy; // 進行方向を反転する } y+=vy; // 進行方向へ進む update(); } } この状態では上下左右にも動かずアニメーションだけうごきます。
|
Re: 上下左右
投稿者 : kenji(YahooBB220010104063.bbtec.net)
- 2004/08/29(Sun) 14:21
No.6948
|
|
|
|
こんなかんじです.
rndomize(); //rnd()で返す値をバラバラにする speed=3; //一回の移動距離 change=30; //移動方向を変える頻度(0に近いほど頻繁に変わります) ... ... while(1) { ... a=rnd(change); if (change==0) shift=rnd(4); if (shift==0) x+=speed; if (shift==1) x-=speed; if (shift==2) y+=speed; if (shift==3) y-=speed; ... }
|
Re: 上下左右
投稿者 : suraimu(YahooBB218113076013.bbtec.net)
- 2004/09/02(Thu) 21:12
No.6999
|
|
|
|
久しぶりにみました。 いつのまにか答えていただいてありがとうございました。 ここまでしてもらってもまだ疑問が残っているので書きます。
rnd()だけではだめなのでしょうか。 ↓ >rndomize(); //rnd()で返す値をバラバラにする >speed=3; //一回の移動距離 >change=30; //移動方向を変える頻度(0に近いほど頻繁に変わり>ます) >... >...←この「・・・」は何ですか?? >while(1) { >... > a=rnd(change); > if (change==0) shift=rnd(4); > if (shift==0) x+=speed; > if (shift==1) x-=speed; > if (shift==2) y+=speed; > if (shift==3) y-=speed; >... >}
|
Re: 上下左右
投稿者 : ごま太郎(i218-44-122-204.s02.a001.ap.plala.or.jp)
- 2004/09/03(Fri) 06:25
No.7002
|
|
|
|
ためしにrndだけでやってみると、いつも同じ方向に動いてしまいます。 「ランダム」というのは名ばかりで、多くのプログラミング言語ではrndで返す値は常に同じになります。 (例:一回目〜1592847390 二回目〜1592847390 三回目も同じ)
rndomize();によってこのrndの計算の基になるものをOSのシステムタイムだったかから取ってくることによって、毎回違うrndの結果が出るようになります。
|
|