将对象拖离屏幕并立即重新出现的最佳方法 - 电晕

时间:2016-04-29 16:15:35

标签: lua 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)

2 个答案:

答案 0 :(得分:0)

您正在寻找的通常被称为"无限背景"或者滚动背景。"以下是一些可以帮助您的指南,第一个指南甚至可以帮助您设计图像: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 )

当然,您必须根据需要进行自定义。希望有所帮助。

答案 1 :(得分:0)

我不确定是否有另一种方法允许1个物体缠绕在寄宿生周围。我猜不是。

我想到的一种方法是在对象开始跨越一个边界时立即创建对象的副本。然后,此副本将来自另一个边界,执行与原始对象完全相同的移动。 其中一个离开屏幕将导致其破坏,因此您再次只有一个对象。实施应该非常简单直接。