如何在 Corona 中实现拖出屏幕并立即重新出现的最佳方法

我正在尝试找出将对象拖出屏幕到侧面并使其立即重新出现的最佳方法,几乎就像是拖动一个超大的图像一样。

我已设置拖动控件,以便它们沿着整个 display.group 移动,但不知道大致该如何实现这部分。

这是我的拖动函数

local baseGroup = display.newGroup()

function dragPlayer(e)
if gameIsActive == true then
    if(e.phase == 'began') then
        display.getCurrentStage():setFocus(baseGroup)
        lastX = e.x - baseGroup.x
        --print("DRAG")
    elseif(e.phase == 'moved') then
        baseGroup.x = e.x - lastX
    elseif(e.phase == 'ended') then
        --print(player.x)
        --onScreenTouch()
    end
end
end

baseGroup:addEventListener("touch", dragPlayer)
点赞
用户4618553
用户4618553

你想要的通常被称为“无限背景”或“滚动背景”。以下是一些指南,可以帮助你,第一个指南甚至可以帮助你设计图像本身:1 2

这是一个简单的块,适用于单个图像:

local landscape = display.newImageRect( "landscape-1.png", 1440, 320 )

-- landscape:setReferencePoint( display.TopLeftReferencePoint ) landscape_1.anchorX = 0 landscape_1.anchorY = 0 landscape_1.x = 0 landscape_1.y = 0

local function reset_landscape( landscape )     landscape.x = 0     transition.to( landscape, {x=0-1440+480, time=30000, onComplete=reset_landscape} ) end

reset_landscape( landscape_1 )

这个比较复杂,可以让你在设计中更加巧妙:

local function make_landscape( image, width, height, time )
    local landscape = display.newImageRect( image, width, height )

    -- landscape:setReferencePoint( display.TopLeftReferencePoint )
    landscape.anchorX = 0
    landscape.anchorY = 0
    landscape.x = 0
    landscape.y = 320 - height
    landscape.time = time

    local function reset_landscape( landscape )
        landscape.x = 0
        transition.to( landscape, {x=0-landscape.width+480, time=landscape.time, onComplete=reset_landscape} )
    end

    reset_landscape( landscape )

    return landscape
end

local landscape_group = display.newGroup()

local landscape_1 = make_landscape( "Landscape-1.png", 1440, 86, 10000 )
local landscape_2 = make_landscape( "Landscape-2.png", 1440, 168, 20000 )
local landscape_3 = make_landscape( "Landscape-3.png", 1440, 215, 30000 )

landscape_group:insert( landscape_3 )
landscape_group:insert( landscape_2 )
landscape_group:insert( landscape_1 )

你需要根据需要自定义,希望可以帮到你。

2016-04-29 16:56:05
用户2858170
用户2858170

我不确定是否有另一种方法可以将一个对象包裹在边界周围。我想不是的。

其中一种方法是在对象开始越过一个边界时立即创建其副本。这个副本将从另一个边界出现,执行与原始对象完全相同的运动。其中一个离开屏幕将导致它的销毁,因此你仍然只有一个对象。实现应该相当简单和直接。

2016-04-29 19:39:40