使用 Corona SDK 将矩形移动(删除/重新出现)

大家好,

我想了解一件事:

我想使用物理和循环让这个矩形从左侧移动到右侧,当它离开左侧屏幕时,使其消失,并在右侧重新出现,

这是我在代码中做的,但我想知道是否有更简单的方法来做到这一点。

使用transition.to是否更好?

附注:我的游戏是一个无尽的奔跑游戏,玩家从地面跳到空中的矩形上。 如果有人有这方面的教程,请告诉我!谢谢

感谢大家的帮助!

    local physics = require( "physics" )
    physics.start()
    physics.setDrawMode( "hybrid")
    local _x = display.contentCenterX
    local _y = display.contentCenterY
    local speed = 10
    local GroupMur1 = display.newGroup()

        -- 创建矩形
        local Mur1 = display.newRect(680,25,680,25)
        Mur1.x = _x +900
        Mur1.y = _y +80
        physics.addBody(Mur1, "static")
        GroupMur1:insert(Mur1)

    local a =1
    -- 更新函数
    local function update ()
        if(a==1)then updateMur1() end
        if(a==2)then updateMur2() end
    end

    -- 更新函数1
    function updateMur1 ()
        GroupMur1.x =GroupMur1.x - speed
        if(GroupMur1.x < -2000) then
            GroupMur1:remove(1)
            a = 2
         end
    end

    -- 更新函数2
    function updateMur2()
        GroupMur1:insert(Mur1)
        physics.addBody(Mur1, "static")
        GroupMur1.x = _x + 900
        a=1
    end

    timer.performWithDelay(1, update, -1)
点赞
用户3185782
用户3185782

虽然transition.to确实非常有用且易于使用,但如果您想使用物理效果,则应使用applyLinearImpulse(),如果还想使用碰撞检测,那就更容易了。一旦矩形超出屏幕,使用ifthen函数。就像这样:

if object.x > 500 then -- 假设有一个20x20的矩形
    object.x = -20
end
2014-01-16 20:09:54
用户1609914
用户1609914

为了扩展@Fannick所说的,下面的代码是通用的方式触发此方法(适用于任何大小的对象)。假设您已经拥有 object.anchorX = 0object:setReferencePoint(display.CenterLeftReferencePoint),具体取决于您的SDK版本(前者用于v2,后者用于v1- 此链接应该有助于澄清差异)

--如果对象过了边界(screenOriginX用于缩放更大的设备)
if object.x > (display.contentWidth - display.screenOriginX) then
    object.x = 0 + display.screenOriginX - object.contentWidth
end

如果您有object.anchorX = 0.5object:setReferencePoint (display.CenterReferencePoint)(或者没有设置任何一个-这两个都是默认值),则为:

if object.x > (display.contentWidth + (object.contentWidth/2) - display.screenOriginX) then
    object.x = 0 + display.screenOriginX - (object.contentWidth/2)
end

对于object.anchorX = 1object:setReferencePoint (display.CenterRightReferencePoint),则为:

if object.x > (display.contentWidth + object.contentWidth - display.screenOriginX) then
    object.x = 0 + display.screenOriginX
end

希望您能找到答案(如果您还没有)。

2014-01-21 14:20:43
用户3127418
用户3127418

我已经使用了速度使矩形开始移动,并使用碰撞使其消失。 你们两个的回答都帮助我更好地理解了 Corona SDK!

2014-01-21 14:35:54