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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0816
匿名動きに丸みをつける5解決


匿名

リンク

2006/8/16(Wed) 10:59:41|NO.2009


randomize my=100 x=100 repeat await 30 if x>mousex:x-=2:gosub *draw if my>mousey:my-=2:gosub *draw if x<mousex:x+=2:gosub *draw if my<mousey:my+=2:gosub *draw gosub *draw loop *draw redraw 0,0,0,30,30 color 255,255,255 boxf 0,0,30,30 pos 0,0 color mes a redraw 1,0,0,30,30 color rnd(255),rnd(255),rnd(255) circle x-15,my-15,x+15,my+15 return

このスクリプトは、マウスについていく芋虫みたいなものをイメージしてるのですが、
動きがカクカクになってしまいます。
動きに丸みをつけるにはどうすればいいのでしょうか?



この記事に返信する


kj

リンク

2006/8/16(Wed) 13:32:23|NO.2013


randomize my=100 x=100 d=5 repeat await 30 gosub *check gosub *draw loop *draw redraw 0,0,0,30,30 color 255,255,255 boxf 0,0,30,30 pos 0,0 color mes a redraw 1,0,0,30,30 color rnd(255),rnd(255),rnd(255) circle x-15,my-15,x+15,my+15 return *idou a=x-mousex : b=my-mousey e=a : f=b if a<0 : a=0-a if b<0 : b=0-b c=a : if c<b : c=b if c=0 : return e=e*d/c f=f*d/c x=x-e:my=my-f return

dが速さで、eがX方向への移動量、fがY方向への移動量、
a,b,cは処理に使っている変数です。



774

リンク

2006/8/16(Wed) 14:40:40|NO.2014

カクカクになるのは
マウス座標と表示座標に差があるときに、
決まった速度と角度で移動させているからだね


my=100 : x=100 speed = 5 repeat await 30 angle = atan(mousey - my,mousex - x) x+=cos(angle)*speed my+=sin(angle)*speed gosub *draw loop //drawラベル以降はそのまま

atanとかはこの掲示板を検索するといいよ



Shinya

リンク

2006/8/16(Wed) 14:51:11|NO.2015

randomize
y=100 x=100 speed=5 repeat a = mousex - x b = mousey - y c = double( sqrt( a*a + b*b ) ) if c { x + double(a)/c * speed ; x座標に移動量を加える y + double(b)/c * speed ; y座標に移動量を加える } gosub *draw await 30 loop *draw redraw 0,0,0,30,30 color 255,255,255 boxf 0,0,30,30 pos 0,0 color mes a redraw 1,0,0,30,30 color rnd(255),rnd(255),rnd(255) circle x-15,y-15,x+15,y+15 return
 現在の座標に、計算式を使って、移動量をリアルタイムに加えてやれば
滑らかに動きます。

 そのためにはまず、現在の座標(x,y)から、マウス座標(mousex,mousey)
までの距離を 変数 c として、その c を「ピタゴラスの定理」で求めます。

/|
c / | a
/ |
/)θ|┐
-------
b

 c*c = a*a + b*b
 c = √(a*a + b*b)

 ピタゴラスの定理で、c の値を求めたら
この値を使って sinθ cosθ を求めます。
sinθ cosθ は、それぞれ
 sinθ = a/c
 cosθ = b/c
で求められます。
これらの値は、x座標の移動量と,y座標の移動量の「最小の値」を意味します。

 さらに、この最小の値に任意のスピードの値を掛け合わせれば
現在の座標(x,y)から、マウス座標(mousex,mousey)までの完全な移動が求められます。

( 計算式をよく見てくだされば分かると思います )



Shinya

リンク

2006/8/16(Wed) 14:54:13|NO.2016

アークタンジェントを使うのがもっとも無難かもしれません。
    /|
c / | a / | /)θ|┐ ------- b



匿名

リンク

2006/8/17(Thu) 10:48:14|NO.2023

kjさん,774さん,Shinyaさん、ご回答ありがとうございます。

アークタンジェントについては後にしっかり勉強したいと思います。



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