この関数だとどんな問題があるのですか?
説明を全くしておらず申し訳ないです。
objが64移動するのをmovewayの配列によって方向を決める関数なのですが,例えばmoveway=["left","left","down"]だった際,左に128,下に64行った地点に瞬間的に移動してしまいます。 そうではなく,左に64,少しの空き時間,左に64,少しの空き時間...というように,for文が繰り返されるたびに若干の空き時間をつくり、段階的に移動している様に見せたいです。
了解です。
これを一つに関数にするのはとても難しいと思いますのでオブジェクトで一旦サンプルをつくってみました。 説明しやすいようかなり助長に書いたのでお好きに改善してもらえたらと思います。
CreateEvent
moveway = ["right","down","left","up"];//移動方向の指定 moveSpd = 1;//移動速度 moveDistance = 64;//移動距離 targetX = 0;//目的地のx座標 targetY = 0;//目的のy座標 isMove = 0;//移動中かどうか
StepEvent
//停止中の状態 if(isMove == false) { //配列の中身があるか if(array_length(moveway) > 0) { //配列の先頭を取得 var dir = array_first(moveway); //方向によって目的の座標を決定 if(dir == "right") { targetX = x + moveDistance; targetY = y; } else if(dir == "left") { targetX = x - moveDistance; targetY = y; } else if(dir == "down") { targetX = x; targetY = y + moveDistance; } else if(dir == "up") { targetX = x; targetY = y - moveDistance; } //先頭の配列を削除 array_delete(moveway,0,1); //移動中に設定 isMove = true; } } //移動中の状態 if(isMove == true) { //指定した位置まで移動 x = approach(x, targetX, moveSpd); y = approach(y, targetY, moveSpd); //到着したら移動停止 if(x == targetX && y == targetY) { isMove = false; } }
まず移動中と停止中で状態を分けました。 ・停止中は配列に値があるか確認して、ある場合はその値を確認して目的座標を決定、移動中にします。 ・移動中は目的座標まで移動し、到着したら停止中にします。 以上を配列がなくなるまで繰り返すことで実現しています。 移動させたい場合は配列に方向の文字列を入れればいつでも先頭の順番で移動します。
ここではapproachという目的の数値まで一定の値で加算させるGameMakerではかなり有名な自作関数を使っています。 中身は次の通りです。
function approach(a,b,c) { return a < b ? min(a + c,b) : max(a - c,b); }
わからないことがあれば聞いてください。
不適切なコンテンツとして通報するには以下の「送信」ボタンを押して下さい。 管理チームへ匿名通報が送信されます。あなたが誰であるかを管理チームに特定されることはありません。
どのように不適切か説明したい場合、メッセージをご記入下さい。空白のままでも通報は送信されます。
通報履歴 で、あなたの通報と対応時のメッセージを確認できます。
マニュアル(ver2~2.2.x) マニュアル(ver2.3~) YoYoGames YoYoGames 公式コミュニティ GM関連のYoutubeチャンネル集 解説・資料サイト集(日本語) 解説・資料サイト集(英語)
説明を全くしておらず申し訳ないです。
objが64移動するのをmovewayの配列によって方向を決める関数なのですが,例えばmoveway=["left","left","down"]だった際,左に128,下に64行った地点に瞬間的に移動してしまいます。
そうではなく,左に64,少しの空き時間,左に64,少しの空き時間...というように,for文が繰り返されるたびに若干の空き時間をつくり、段階的に移動している様に見せたいです。
了解です。
これを一つに関数にするのはとても難しいと思いますのでオブジェクトで一旦サンプルをつくってみました。
説明しやすいようかなり助長に書いたのでお好きに改善してもらえたらと思います。
CreateEvent
StepEvent
まず移動中と停止中で状態を分けました。
・停止中は配列に値があるか確認して、ある場合はその値を確認して目的座標を決定、移動中にします。
・移動中は目的座標まで移動し、到着したら停止中にします。
以上を配列がなくなるまで繰り返すことで実現しています。
移動させたい場合は配列に方向の文字列を入れればいつでも先頭の順番で移動します。
ここではapproachという目的の数値まで一定の値で加算させるGameMakerではかなり有名な自作関数を使っています。
中身は次の通りです。
わからないことがあれば聞いてください。