使用Corona/LUA编程,通过“tap”方式让角色跳跃。

我在 corona 中运动时遇到了问题。我已经设置好了角色可以向左和向右奔跑,现在我正在尝试让角色跳跃,当你点击角色时触发。但我无法让代码运行起来。

代码:

---------------------------------------------------------------------------------
-- 角色属性
---------------------------------------------------------------------------------

display.setDefault("magTextureFilter", "nearest")

local options =
{   -- 必需参数
    width = 32,
    height = 32,
    numFrames = 20,

    -- 可选参数;用于动态分辨率支持
    sheetContentWidth = 160,  -- 表格的原始宽度
    sheetContentHeight = 128   -- 表格的原始高度
}

local sheetAsh = graphics.newImageSheet( "boy.png", options )

local sequenceData =
{
    { name="down_stand", start=1, count=1},
    { name="down_run", frames={2, 3, 4, 5}, time=400, loopCount=0,  loopDirection = "bounce"},
    { name="left_stand", start=6, count=1},
    { name="left_run", frames={7, 8, 9, 10}, time=800, loopCount=0, loopDirection = "bounce"},
    { name="up_stand", start=11, count=1},
    { name="up_run", frames={12, 13, 14, 15}, time=1000, loopCount=0,  loopDirection = "bounce"},
    { name="right_stand", start=16, count=1},
    { name="right_run", frames={17, 18, 19, 20}, time=800, loopCount=0, loopDirection = "bounce"},
}

local spriteAsh = display.newSprite( sheetAsh, sequenceData )

physics.addBody(spriteAsh, "dynamic", {density =1.5 , bounce = 0.5, radius = 28})
spriteAsh.x = _W * 0.5
spriteAsh.y = _H * 0.5
spriteAsh.xScale = 2
spriteAsh.yScale = 2
spriteAsh.linearDamping = 2

local touchX, touchY

local touchScreen = function(e)
    if e.phase == "began" then
        touchX = e.x
        touchY = e.y
    elseif e.phase == "moved" then
        local difX = e.x - touchX
        local difY = e.y - touchY

        spriteAsh:applyForce(difX *50, 0, spriteAsh.x, spriteAsh.y)

        touchX = e.x
        touchY = e.y
    elseif e.phase == "ended" then

    end

end

local function jumptouch( event )
        if ( event.phase == "began" ) then
                spriteAsh:applyForce( 250, -1500, spriteAsh.x, spriteAsh.y )
        end
        return true
end

local function onScreenTouch( event )
        if event.phase == "began" then
                spriteAsh:applyForce( 250, -1500, spriteAsh.x, spriteAsh.y )
        end

        return true
end

spriteAsh:addEventListener( "tap", jumptouch, )
点赞
用户2186639
用户2186639

"tap" 事件没有 event.phase 字段。因此,如果您删除 event.phase == "began" 检查,我认为它会正常工作。

2014-01-17 18:26:31