Как обнаружить событие TouchOut в Corona SDK? - PullRequest
2 голосов
/ 27 августа 2011

В моей игре Corona в углу экрана размещена графика джойстика.

Когда пользователь касается джойстика и перетаскивает его из стороны в сторону, он перемещает персонажа. Однако, если пользователь перетаскивает из середины джойстика в сторону , а затем убирает палец, персонаж продолжает двигаться. Мне бы хотелось, чтобы персонаж остановился при доделывании, даже если обводки больше нет на графике джойстика.

Изображение джойстика подписывается на «сенсорный» слушатель с control:addEventListener( "touch", onTouch ).

Код джойстика ниже:

-- Constants
local playerSpeed = 300
local playerDamping = 15

-- Player controls
local onTouch = function( event )

    -- Player rotation
    local deltaX = event.x - control.x
    local deltaY = event.y - control.y
    local magnitude = math.sqrt( deltaX * deltaX + deltaY * deltaY )

    player.rotation = math.deg( math.atan2 ( deltaY, deltaX ) )

    -- Player speed
    if event.phase == "ended" then
        player.linearDamping = playerDamping
    else
        player.linearDamping = 0
        player:setLinearVelocity( deltaX / magnitude * playerSpeed, deltaY / magnitude * playerSpeed )
    end
end

Есть идеи? Спасибо!

1 Ответ

5 голосов
/ 30 августа 2011

Добавьте:

if event.phase == "began" then
    display.getCurrentStage():setFocus( control, event.id )
end

в тело функции onTouch, чтобы подписаться на событие «окончание касания», даже когда палец пользователя не находится на джойстике.

...