使用触摸移动玩家向左和向右的 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
点赞
用户869951
用户869951

尝试

print(“在触摸事件中”)
如果isSimulator then 
    如果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?所以尝试:

function Listeners(event)
    如果事件== 'add' then 
        print'添加触摸侦听器:',touchPlayer)
        player:addEventListener('touch',touchPlayer)
2014-03-24 20:54:20
用户2409015
用户2409015

因为您没有在设备上分配触摸监听器。您仅为模拟器分配了触摸监听器,无法在模拟器上测试触摸事件。 因此,也要为设备分配它,并在 begin 条件中添加以下行。

display.getCurrentStage():setFocus( event.target )
2014-03-25 11:48:46