|
|
2020/4/7(Tue) 12:25:26|NO.89990
#include "hgimg3.as"
screen 0,320,240
hgini
setcolor 255,0,255
addbox model,10,10
regobj obj,model
*main
getkey xKey,'X'
getkey yKey,'Y'
getkey zKey,'Z'
if xKey : addang obj, 0.1, 0.0, 0.0
if yKey : addang obj, 0.0, 0.1, 0.0
if zKey : addang obj, 0.0, 0.0, 0.1
if (xKey|yKey|zKey)=0 : setang obj, 0.0, 0.0, 0.0
hgdraw
hgsync 20
goto *main
このプログラムでボックスの回転に制限をかけてここまでは回らないというのを再現したいのですが
IF文をどうやって書いていいのかが分からないです。
どうすればいいのか教えていただけないでしょうか?
|
|
2020/4/7(Tue) 13:00:13|NO.89991
getangで各角度を取得して制限をかければいいだけかと。
例:
// 〜省略〜
*main
getkey xKey,'X'
getkey yKey,'Y'
getkey zKey,'Z'
getang obj, angx, angy, angx;
if(xKey) && (angx < 1.0) : addang obj, 0.1, 0.0, 0.0; xが1.0までは回転可能
// 〜省略〜
|
|
2020/4/7(Tue) 13:21:04|NO.89992
すみません説明がややこしくてすみません
回転が0から1.0〜-1.0の範囲までで回転に制限がかけられれば良い感じですかね
|
|
2020/4/7(Tue) 14:23:07|NO.89993
キーを押していない状態を無回転(0.0)とするのならば
キーを増やさないといけないのではないでしょうか。
例えば
Xキーを押すと回転角度を+0.1
Sキーを押すと回転角度を-0.1
といった具合にすれば可能だと思います。
もしも仮に1.0まで行ったらいきなり-1.0に飛ぶような動きの場合ならば
getang obj, angx, angy, angx;
if xKey {
if( angx > 1.0 ) {
setang obj, -1.0, 0.0, 0.0;
}
addang obj, 0.1, 0.0, 0.0;
}
こんな感じにするとキーを増やさなくても可能です。
|
|
2020/4/7(Tue) 20:44:03|NO.90000
>getang obj, angx, angy, angx;
Zの箇所をXと打ち間違えていました。申し訳ありません。
あとから思いついたのですが、
もしかして振り子運動的な動きでしょうか?
#include "hgimg3.as"
screen 0,320,240
hgini
setcolor 255,0,255
addbox model,10,10
regobj obj,model
addx = 0.1;
addy = 0.1;
addz = 0.1;
*main
getkey xKey,'X'
getkey yKey,'Y'
getkey zKey,'Z'
getang obj, angx, angy, angz;
if( (angx > 1.0) || (-1.0 > angx) ) : addx = -addx;
if( (angy > 1.0) || (-1.0 > angy) ) : addy = -addy;
if( (angz > 1.0) || (-1.0 > angz) ) : addz = -addz;
if xKey : addang obj, addx, 0.0, 0.0
if yKey : addang obj, 0.0, addy, 0.0
if zKey : addang obj, 0.0, 0.0, addz
if (xKey|yKey|zKey)=0 : setang obj, 0.0, 0.0, 0.0
hgdraw
hgsync 20
goto *main
|
|
2020/4/10(Fri) 20:49:31|NO.90049
そうです振り子のような動きを探していましたおかげさまで解決しました
プログラミング頑張ります
|
|