function movestart(moveway,obj)
{
show_debug_message(moveway);
var len = array_length_1d(moveway);
for(var i=0;i<len;i++){
if(moveway[i]=="right"){obj.x+=64;}
if(moveway[i]=="left"){obj.x-=64;}
if(moveway[i]=="down"){obj.y+=64;}
if(moveway[i]=="up"){obj.y-=64;}
}
}
この関数を改良して、滑らかにobjを動かせるようにしたいです。
どうすれば良いですか。
追記(6/16 22:23)
説明が足りていなかったため、付け足させていただきます。
objが64移動するのをmovewayの配列によって方向を決める関数なのですが,例えばmoveway=["left","left","down"]だった際,左に128,下に64行った地点に瞬間的に移動してしまいます。
そうではなく,左に64,少しの空き時間,左に64,少しの空き時間...というように,for文が繰り返されるたびに若干の空き時間をつくり、段階的に移動している様に見せたいです。
この関数だとどんな問題があるのですか?
説明を全くしておらず申し訳ないです。
objが64移動するのをmovewayの配列によって方向を決める関数なのですが,例えばmoveway=["left","left","down"]だった際,左に128,下に64行った地点に瞬間的に移動してしまいます。
そうではなく,左に64,少しの空き時間,左に64,少しの空き時間...というように,for文が繰り返されるたびに若干の空き時間をつくり、段階的に移動している様に見せたいです。
了解です。
これを一つに関数にするのはとても難しいと思いますのでオブジェクトで一旦サンプルをつくってみました。
説明しやすいようかなり助長に書いたのでお好きに改善してもらえたらと思います。
CreateEvent
StepEvent
まず移動中と停止中で状態を分けました。
・停止中は配列に値があるか確認して、ある場合はその値を確認して目的座標を決定、移動中にします。
・移動中は目的座標まで移動し、到着したら停止中にします。
以上を配列がなくなるまで繰り返すことで実現しています。
移動させたい場合は配列に方向の文字列を入れればいつでも先頭の順番で移動します。
ここではapproachという目的の数値まで一定の値で加算させるGameMakerではかなり有名な自作関数を使っています。
中身は次の通りです。
わからないことがあれば聞いてください。
ありがとうございます!
無事実行できました!