HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0209
ネットヤンキーまみキャラクターを斜めに移動させる場合の計算式2解決


ネットヤンキーまみ

リンク

2022/2/9(Wed) 18:33:49|NO.95360

あるキャラクターを任意の座標xx,yyへ移動させたい場合
メインループ等で毎回描画する度に下記の命令で

repeat //座標相違時、spd分移動 if x>xx : x=limit(x+spd,,xx) if x<xx : x=limit(x-spd,xx,) if y>yy : y=limit(y+spd,,yy) if y<yy : y=limit(y-spd,yy,) gosub chara_draw x,y//※キャラクター描画 await 10 loop
とするのが一番簡単だと思っているのですが、これだと…
・xとyが共に相違しているcntではナナメ移動
・xまたはyが一致しているターン以降はチョクセン移動
となってしまいます。

簡単に言うと折れ曲がる起動を描く事になります。

何か数学的な2次方程式で"折れ曲がらない最後まで一直線の軌道"
を描ける気がしているのですが、知識がなくて分からないままです。

1フレーム毎に任意の速度で"折れ曲がらない最後まで一直線の軌道"を描くには
どんな知識を得れば可能でしょうか。

ご教示いただけますと幸いです。
よろしくお願い致します。



この記事に返信する


沢渡

リンク

2022/2/9(Wed) 20:47:16|NO.95362

このような形でやってみましたが、どうでしょうか。
ここでは仮に、目標地点である(xx,yy)はマウスカーソルの座標とし、
「マウスカーソルを追いかける"●"」という内容にしています。
またchara_drawについては簡易的な描画にしていますので、
この辺りは適宜置き換えていただければと思います。

#module #defcfunc limit_move int a,int b,int c //aをbに変化させる時、cをまたいでしまう形になるならcを、そうでないならbを返す if (a>=c)&(b<=c) : return c if (a<=c)&(b>=c) : return c return b #global spd=5 repeat //座標相違時、spd分移動 xx=mousex : yy=mousey //仮にここでは、xxとyy(目標地点)はマウスの座標ということにします。 t=atan(yy-y,xx-x) //角度を求める x=limit_move(x,int(cos(t)*spd)+x,xx) y=limit_move(y,int(sin(t)*spd)+y,yy) chara_draw x,y //※キャラクター描画 await 10 loop #deffunc chara_draw int dx,int dy //簡易的な描画 redraw 0 color 255,255,255 : boxf : color 0,0,0 pos dx,dy : mes "●" redraw 1 return



ネットヤンキーまみ

リンク

2022/2/11(Fri) 12:56:06|NO.95377

すごいです。こんな方法があるなんて…。
しかし読んでみても全然何しているのかわかりません。。。
ゆっくりひも解いてみたいと思います。ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.