0

私はまた問題に直面しています。ということで、コロナでゲームを作っています。オブジェクトをタッチ座標まで一直線に移動させたい。関数を簡単に使用できることはわかっていtransition.to()ますが、遷移中に物理エンジンが適切に機能しません。次のコードを書きましたが、もちろん円はまっすぐには動きません。

function controls(event)
    if event.phase == "began" or event.phase == "moved" then
        follow = true
        touchX = event.x; touchY = event.y
    end

    if event.phase == "ended" then
        follow = false
    end
end

function playerMotion()
    if follow == true then
        if circle.y < touchY then
            circle.y = circle.y + 1
        elseif circle.y > touchY then
            circle.y = circle.y - 1
        end

        if circle.x < touchX then
            circle.x = circle.x + 1
        elseif circle.x > touchX then
            circle.x = circle.x - 1
        end
    end
end

私の質問が十分に明確であることを願っています。

4

3 に答える 3

0

この関数よりも複雑なものが必要になります。これが行うことは、単に目的地に「近づく」ことです。それはまっすぐな道をたどりません。

やりたいことを達成するには、いくつかのことを行う必要があります。

  1. あなたの位置を見つけます。
  2. 目的地の位置を見つけます。
  3. 開始位置から終了位置までの水平距離を計算します。
  4. 縦以外は同じ。
  5. これを開始オブジェクトに追加すると、すぐに目的地に到達します。どうすればそれをゆっくり動かすことができますか? 垂直距離と水平距離を「速度」変数で割るだけです。これは、オブジェクトが 1 フレームで移動する速度です。
  6. フレームごとに、見つけた x および y コンポーネントを追加してオブジェクトを更新します。
  7. 目的地に到着したかどうかを確認します。必要に応じて手順 6 を繰り返します。(または: 移動した水平距離と垂直距離を追跡し、それを元の結果と比較します。)

そこにあります!

于 2013-07-25T01:14:01.377 に答える