在游戏中按顺序收集物品(使用Corona SDK)。

我正在创建一个游戏,在游戏中玩家必须收集硬币以获得更高的得分。有三种硬币,当你收集其中一种时,它会显示在 UI 中的 "硬币栏" 上。硬币栏有三个空洞(就像 "切绳子" 和其他游戏中一样)。目前,当玩家收集第二个硬币时,硬币栏中的第二个洞会填满。我希望这些洞按顺序填充,这样在没有收集第一个硬币的情况下收集第二个硬币将填满第一个空洞。

以下是代码:

------硬币栏

    local coin_bar = {}
    for i=1,3 do
        coin_bar[i] = display.newImage ("coin_bar.png", 57, 57)
    end

    coin_bar[1].x = 325
    coin_bar[1].y = 37
    coin_bar[2].x = 385
    coin_bar[2].y = 37
    coin_bar[3].x = 445
    coin_bar[3].y = 37

--添加硬币并处理

    local coinSprites=grabber.grabSheet("starAnim")
    local coinGroup = display.newGroup()
    local coins = {}
    isLiving = {}
    for i=1,3 do
        isLiving[i] = 1
        coins[i] = coinSprites:grabSprite("",true,{ starAnim={1,6,200,0}})
        coins[i]:playClip("starAnim")
        coinGroup:insert(coins[i])
    end

    local function coinCollect(event)
        for i=1, 3 do -- 硬币个数
            coin_clear = false
            if isLiving[i] == 1 then
                if ball.x > coins[i].x -40 and ball.x < coins[i].x +40
                and  ball.y > coins[i].y -40 and ball.y < coins[i].y +40 then
                coins[i]:removeSelf()
                coins[i] = nil
                coins[i] = display.newImage ("coin_bar_collected.png", 57, 57)
                coins[i].x = coin_bar[i].x
                coins[i].y = coin_bar[i].y
                isLiving[i] = 0
                if i == 2 and coins[1] == nil then -- 如果第一个硬币被收集并且第二个硬币被收集,则填充第一个洞
                coins[1] = display.newImage ("coin_bar_collected.png", 57, 57)
                coins[1].x = coin_bar[1].x
                coins[1].y = coin_bar[1].y
                end
                end
            end
        end
    end

    Runtime:addEventListener( "enterFrame", coinCollect )
点赞
用户1369488
用户1369488

试着用以下代码替换掉硬币条中的所有内容:

------硬币条

local coin_bar = {}
for i=1,3 do
    coin_bar[i] = display.newImage ("coin_bar.png", 325+(i*60), 37)
end

看看是否解决您的问题。

2012-08-09 13:25:58
用户932927
用户932927

为什么不在 coin_bar 中添加一个 collected 属性,用于跟踪最近使用的位置呢?例如:

local coin_bar = {collected = 0}

...

local function coinCollect(event)
    for i=1, 3 do -- 硬币数
        coin_clear = false
        if isLiving[i] == 1 then
            if ball.x > coins[i].x -40 and ball.x < coins[i].x +40
            and  ball.y > coins[i].y -40 and ball.y < coins[i].y +40 then
            coins[i]:removeSelf()
            coins[i] = nil
            coins[i] = display.newImage ("coin_bar_collected.png", 57, 57)
            local bar_index = coin_bar.collected + 1
            coins[i].x = coin_bar[bar_index].x
            coins[i].y = coin_bar[bar_index].y
            coin_bar.collected = bar_index
            isLiving[i] = 0
            end
        end
    end
end
2012-08-09 14:47:02