2017-08-11 9 views
0

マリオブラザーズに似たプラットフォームタイプのゲームを作成しています。大きな問題を抱えています。私の問題は、方向キーをタップしてドラッグすると、そのクリックをリリースしたにもかかわらずキャラクターが動き続けていることです。私はすでにコロナフォーラムにこの質問を掲載しており、解決には至りませんでした。私はコロナに精通していないんだけど、多分私はあなたを助けることができる方向キーから滑り落ちた後にキャラクターが動き続ける

local function makeControls(event) 
if anim.isJumping == false then 
    if event.phase == "began" then 
    if event.target.isPressed == false then 
     if event.target.id == "left" then 
     walk(-1) 
     elseif event.target.id == "right" then 
     walk(1) 
     end 
    end 
    event.target.isPressed = true 
    elseif (event.phase == "moved" and event.target.isPressed == true) then 
     if (
      event.x > event.target.contentBounds.xMin+4 and 
      event.x < event.target.contentBounds.xMax-4 and 
      event.y > event.target.contentBounds.yMin+4 and 
      event.y < event.target.contentBounds.yMax-4 
    ) then 
      event.target:dispatchEvent({ name="touch", phase="began", target=event.target }) 
     else 
      event.target:dispatchEvent({name = "touch", phase = "ended", target = event.target }) 
     end 
    elseif event.phase == "ended" then 
    anim:setLinearVelocity(0,0) 
    event.target.isPressed = false 
    end 
end 
return true 
end 

    local function createArrowKey(group, x, y, rotation, name) 
    local newButtonBoundary = display.newRoundedRect(group, x, y, 75, 75, 12) 
    newButtonBoundary.strokeWidth = 6 
    newButtonBoundary:setStrokeColor(1, 1, 1, 0.5) 
    newButtonBoundary:setFillColor(1, 1, 1, 0.2) 
    newButtonBoundary.id = name 
    newButtonBoundary:addEventListener("touch", makeControls) 
    newButtonBoundary.isPressed = false 
    local newArrow = display.newPolygon(group, x, y, { 0, -24, 24, 24, -24, 24 }) 
    newArrow.rotation = rotation 
    newArrow.strokeWidth = 3 
    end 

    createArrowKey(parent2, left + fullw/3, bottom - fullh/5.5, 90, "right") 
    createArrowKey(parent2, left + fullw/5.5, bottom - fullh/5.5, 270, "left") 
    createArrowKey(parent2, left + fullw/3.88, bottom - fullh/8.5, 180, "down") 
    createArrowKey(parent2, left + fullw/3.88, bottom - fullh/3.9, 0, "up") 
    createButton(parent2, left + fullw - 150, bottom - fullh/5.5, "Shoot", "shoot") 
    createButton(parent2, left + fullw - 250, bottom - fullh/5.5, "Throw", "throw") 
    createButton(parent2, left + fullw - 350, bottom - fullh/5.5, "Melee", "melee") 
+0

たぶん(https://github.com/ponywolf/joykey)[Ponywolfによってjoykeyとvjoy]をしてみてくださいを。 – ldurniat

+0

私は試しましたが、私は決して左と右の動きを働かせることができませんでした。 – alexjr

+0

なぜ、左右の動きがうまくいかないのですか? – ldurniat

答えて

0

は、ここに私のコードです。

if event.phase == "began" then 
    if event.target.isPressed == false then 
     if event.target.id == "left" then 
     walk(-1) 
     elseif event.target.id == "right" then 
     walk(1) 
     end 
    end 
    event.target.isPressed = true 

したがって、画面に触れるとフェーズ==「開始」のタッチイベントが表示されます。

タッチしたボタンに応じて、左または右に移動し、その特定のボタンが押されたことを覚えています。

elseif (event.phase == "moved" and event.target.isPressed == true) then 
     if (
      event.x > event.target.contentBounds.xMin+4 and 
      event.x < event.target.contentBounds.xMax-4 and 
      event.y > event.target.contentBounds.yMin+4 and 
      event.y < event.target.contentBounds.yMax-4 
    ) then 
      event.target:dispatchEvent({ name="touch", phase="began", target=event.target }) 
     else 
      event.target:dispatchEvent({name = "touch", phase = "began", target = event.target }) 
     end 

は今、あなたのそのボタンに指やあなたがそれを動かす場合は、上記の行に扱うWICH「移動」==相とタッチevantがあるでしょう。その動きがあなたのボタンの周りに±4ピクセル以内で起こる場合は、phase == "started"のタッチイベントを送出します。だからあなたのボタン内を移動する限り、あなたの男は移動し続けるでしょう。

私の質問はここにあります:あなたの指がボタンの中または外にある場合、なぜ同じことをしますか?あなたは、あなたがボタン上で指を離すと、followin elseifブロックに入るので、動きを止めます。ボタンからドラッグして持ち上げると、元のタッチイベントは終了せず、他のタッチ終了タッチイベントも作成されません。

elseif event.phase == "ended" then 
    anim:setLinearVelocity(0,0) 
    event.target.isPressed = false 
    end 

あなたの指がボタンから離れると、elseブロックに "touch" "ended"イベントが送出されるはずです。

これにより、問題が解決する場合があります。残念ながら、私は提案されたソリューションをテストできません。

+0

ありがとうございました。しかし、elseブロックに終了フェーズを追加すると、同じことが起こります。また、私は間違って、コードの前のバージョンを配置しました。ここで、elseフェーズにはフェーズディスパッチが開始されていました。 – alexjr

1

私は新しいイベントを生成しませんしようとするだろう:

local function makeControls(event) 
if anim.isJumping == false then 
    if event.phase == "began" then 
    if event.target.isPressed == false then 
     if event.target.id == "left" then 
     walk(-1) 
     elseif event.target.id == "right" then 
     walk(1) 
     end 
    end 
    event.target.isPressed = true 
    elseif (event.phase == "moved" and event.target.isPressed == true) then 
     if (
      event.x > event.target.contentBounds.xMin+4 and 
      event.x < event.target.contentBounds.xMax-4 and 
      event.y > event.target.contentBounds.yMin+4 and 
      event.y < event.target.contentBounds.yMax-4 
    ) then 
      if event.target.id == "left" then 
      walk(-1) 
      elseif event.target.id == "right" then 
      walk(1) 
      end 
     else 
     anim:setLinearVelocity(0,0) 
     event.target.isPressed = false 
     end 
    elseif event.phase == "ended" then 
    anim:setLinearVelocity(0,0) 
    event.target.isPressed = false 
    end 
end 
return true 
end 
+0

同じことが起こります。ところで、これはブレントソレントのコードです。彼は解決策に取り組んでいると言いました。 (彼はコロナのチュートリアルとしてこれを書いています)また、あなたはポーランド人ですか? – alexjr

+0

ええ、私はポーランド人です。 – ldurniat

関連する問題