円移動
投稿者 : masa(ed101.AFL36.vectant.ne.jp)
- 2004/07/11(Sun) 11:34
No.6582
|
|
|
|
|
また質問します。 カーソルキー左右で$enを中心に円形に移動し、 上下でたてに移動するプログラムを作ろうとして extends SpriteChar; angle=270; ty=y; while(1){ if(x>$en.x-128&&x<$en.x+128&&y>$en.y-128&&x<$en.y+96){zOrder=-1;}else{zOrder=30;} if(getkey(38)==0&&getkey(40)==0)x=$en.x+(dist(x-$en.x,y-$en.y))*cos(angle); if(getkey(38)==0&&getkey(40)==0)y=$en.y+(dist(x-$en.x,y-$en.y))*sin(angle); if(getkey(37))angle+=1; if(getkey(39))angle-=1; if(angle>360)angle=0; if(angle<0)angle=360; if(getkey(38))y=y+0.5; if(getkey(40))y=y-0.5; update(); update();} としたのですが、 こうするとたてに移動した後に位置がかわってしまいます。 どうすればよいでしょうか?
|
Re: 円移動
投稿者 : N(actkyo055141.adsl.ppp.infoweb.ne.jp)
- 2004/07/11(Sun) 15:54
No.6585
|
|
|
|
左右で旋回、上下で距離を決めるのでしょうか? それなら、以下のようにすればよいでしょう。
angle=270; r=50; while(1){ if(x>$en.x-128&&x<$en.x+128&&y>$en.y-128&&x<$en.y+96){zOrder=-1;}else{zOrder=30;} if(getkey(37))angle+=1; if(getkey(39))angle-=1; if(angle>360)angle=0; if(angle<0)angle=360; if(getkey(38))r=r+0.5; if(getkey(40))r=r-0.5; x=$en.x+r*cos(angle); y=$en.y+r*sin(angle); update(); }
やりたいこと、違っていたらすみません。。。
|
Re: 円移動
投稿者 : masa(ed131.AFL40.vectant.ne.jp)
- 2004/07/11(Sun) 20:07
No.6588
|
|
|
|
説明不足でした。 上下を押すと、円に関係なく真上、真下に動くようにしたいのですが、自分の方法だと真ん中に吸い寄せられる形になってしまいます。 y+=0.5; などとやっても真ん中に吸い寄せられてしまいます。 どうしてなのでしょうか?
|
Re: 円移動
投稿者 : bluesnow(i137107.ap.plala.or.jp)
- 2004/07/11(Sun) 20:28
No.6589
|
|
|
|
if(getkey(38)==0&&getkey(40)==0)x=$en.x+(dist(x-$en.x,y-$en.y))*cos(angle); if(getkey(38)==0&&getkey(40)==0)y=$en.y+(dist(x-$en.x,y-$en.y))*sin(angle);
ここでangleが修正されていないのが問題だと思われます。 angleメソッドをつかってangle(x-$en.x,y-$en.y)でしょうか。
精度に不満があればアップロード板からRyotaさんの円関数を参照してください
|
Re: 円移動
投稿者 : masa(ed191.AFL10.vectant.ne.jp)
- 2004/07/12(Mon) 22:37
No.6603
|
|
|
|
えーっと、angleメソッドというものをどうつかえばよいのでしょうか? angle=angle(x-$en.x,y-$en.y)のようにしたのですがうまくいきません。
|
Re: 円移動
投稿者 : bluesnow(i137107.ap.plala.or.jp)
- 2004/07/12(Mon) 23:41
No.6604
|
|
|
|
angleメソッドの使い方はヘルプをご覧下さい。 http://tonyu.kake.info.waseda.ac.jp/api/wiki.cgi?page=angle
前回のは失敗みたいです ごめんなさいm(__)m この移動は値を修正するタイミングが面倒なので以下のようになります。 上下移動の時と回転の時は切り離します。
extends SpriteChar;
angle = 270; // 角度 r = 100; // 半径 x = $en.x + r * cos(angle); // 角度と半径から最初の位置を計算 y = $en.y + r * sin(angle); while(1){ if(x>$en.x-128&&x<$en.x+128&&y>$en.y-128&&x<$en.y+96){zOrder=-1;}else{zOrder=30;}
if( getkey(38) ) y += 0.5; if( getkey(40) ) y -= 0.5; if( getkey(38) || getkey(40) ){ // y座標が変化したとき r = dist ($en.x-x, $en.y-y); // 半径を修正 angle = angle(x-$en.x, y-$en.y); // 角度を修正 } if( getkey(37) ) angle += 1; if( getkey(39) ) angle -= 1; if( getkey(37) || getkey(39) ){ // 角度が変化したとき if(angle < 0) angle += 360; if(angle > 360) angle -= 360; x = $en.x + r * cos(angle); // x座標を修正 y = $en.y + r * sin(angle); // y座標を修正 } update(); }
angleの精度をあげたい場合は下を貼り付けてください http://tonyu.kake.info.waseda.ac.jp/uploadcenter/joyful.cgi?mode=res&no=2503
|
Re: 円移動
投稿者 : masa(ed201.AFL39.vectant.ne.jp)
- 2004/07/13(Tue) 22:27
No.6607
|
|
|
|
おお!完璧に動くようになりました。 本当に感謝です。
|
|