Corona SDK -使用触摸左右移动玩家(包含代码)



如果之前有人问过这个问题,我很抱歉,我尝试过搜索,但无济于事。无论如何,我有某种逻辑错误,阻止我的播放器对象左右移动,当我试图移动它。任何提示将不胜感激,因为我是Lua的初学者。谢谢你的宝贵时间。

function spawnPlayer()
player = display.newImage('player.png') 
player.x = display.contentWidth * 0.5
player.y = display.contentHeight - player.height
player.name = 'player'
physics.addBody(player)
Score()
end
function Score()
score = display.newText('Score: ', 1, 0, native.systemFontBold, 14)
score.x = _W / 9
score.y = 0
score.text = score.text .. tostring(intscore)
Listeners('add')
end
function Listeners(event)
if event == 'add' then
    --Runtime:addEventListener("accelerometer", accelPlayer)
    --player:addEventListener("touch", touchPlayer)
    player:addEventListener('touch', touchPlayer)
    player:addEventListener('accelerometer', accelPlayer)
elseif event == 'remove' then
    Runtime:removeEventListener("accelerometer", accelPlayer)
    player:removeEventListener("touch", touchPlayer)
end
end
function touchPlayer:touch(event)
if isSimulator then
    if event.phase == "began" then
        moveX = event.x - player.x
    elseif event.phase == "moved" then
        player.x = event.x - moveX
    end
    if((player.x - player.width * 0.5) < 0) then
        player.x = player.width * 0.5
    elseif((player.x + player.width * 0.5) > display.contentWidth)
    then
        player.x = display.contentWidth - player.width * 0.5
    end 
end
end
function accelPlayer:accelerometer(event)
player.x = display.contentCenterX - (display.contentCenterX * (event.yGravity * 3))
if((player.x - player.width * 0.5) < 0) then
    player.x = player.width * 0.5
elseif((player.x + player.width * 0.5) > display.contentWidth)
then
    player.x = display.contentWidth - player.width * 0.5
end
end

Try

print("in touch event")
if isSimulator then
    if event.phase == "began" then
        print("touch started")
        startX = event.x
    elseif event.phase == "moved" then
        local changeSinceLast = event.x - startX
        player.x = player.x + changeSinceLast 
        startX = event.x
        print("touch moved")
    end

更新:

如果没有打印任何内容,那么您必须查看导致touchPlayer:touch(event)被调用的原因。是Listeners('add')。此外,该函数有touchPlayer,但是touchPlayer存在时,这个函数被调用?所以试试:

function Listeners(event)
    if event == 'add' then
        print('adding touch listener:', touchPlayer)
        player:addEventListener('touch', touchPlayer)

因为你没有在设备上分配触摸监听器。你已经为模拟器分配了触摸监听器,你不能在模拟器上测试触摸事件。因此,将其分配给device also,并在开始条件中添加以下行。

display.getCurrentStage (): setFocus(事件。

最新更新