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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0619
黒ノ巣mousex,yでの移動2解決


黒ノ巣

リンク

2017/6/19(Mon) 16:59:13|NO.80307

mousex,yでの移動


speed = 1 emax = 2500 repeat emax exr(cnt)=rnd(206)+50 exg(cnt)=rnd(206)+50 exb(cnt)=rnd(206)+50 ex(cnt)=rnd(20000)-10000 ey(cnt)=rnd(20000)-10000 await 0 loop repeat redraw 0 color 10,10,50 : boxf color 0, 128, 255 pos 315, 230 mes "●" if mousex >= ginfo_winx/2 : mx=mx-(1+speed) if mousex <= ginfo_winx/2 : mx=mx+(1+speed) if mousey >= ginfo_winy/2 : my=my-(1+speed) if mousey <= ginfo_winy/2 : my=my+(1+speed) repeat emax color exr(cnt), exg(cnt), exb(cnt) circle ex(cnt)+mx,ey(cnt)+my,ex(cnt)+mx+5,ey(cnt)+my+5,1 loop redraw 1 await 16 loop

このスクリプト、mousex,yを使っていますがこれだと4分割にしか移動できません。
[そのマウスの方向へ移動する]というのを作っています。

これを

if mousex >= ginfo_winx/2 : mx=mx-(1+speed) if mousex <= ginfo_winx/2 : mx=mx+(1+speed) if mousey >= ginfo_winy/2 : my=my-(1+speed) if mousey <= ginfo_winy/2 : my=my+(1+speed)
どうのようにすればいいですか?



この記事に返信する


kanahiron

リンク

2017/6/19(Mon) 17:28:02|NO.80308

三角関数をつかえば簡単にできますよ

speed = 1.5 emax = 2500 rad = 0.0 //角度 repeat emax exr(cnt)=rnd(206)+50 exg(cnt)=rnd(206)+50 exb(cnt)=rnd(206)+50 ex(cnt)=rnd(20000)-10000 ey(cnt)=rnd(20000)-10000 await 0 loop repeat redraw 0 color 10,10,50 : boxf color 0, 128, 255 pos 315, 230 mes "●" rad = atan(mousex-320, mousey-240) + M_PI //角度の計算と位相の反転 mx=mx+ sin(rad)*(speed) my=my+ cos(rad)*(speed) repeat emax color exr(cnt), exg(cnt), exb(cnt) circle ex(cnt)+mx,ey(cnt)+my,ex(cnt)+mx+5,ey(cnt)+my+5,1 loop redraw 1 await 16 loop
しかし元ソースだと座標を整数で管理しているのでスピードの遅いうちはカクカクした動きになりますね



黒ノ巣

リンク

2017/6/19(Mon) 18:03:09|NO.80309

>三角関数をつかえば簡単にできますよ
本当ですね^^ こういう時に使うのか...勉強になりました。
>しかし元ソースだと座標を整数で管理しているのでスピードの遅いうちはカクカクした動きになりますね
変数speedを調整したら自分が求めてたスピードになりました。

kanahironさんありがとうございました。



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