Lua for循环不能正确迭代

时间:2014-10-28 18:26:51

标签: for-loop lua drag-and-drop corona collision

我迫切需要for循环的帮助。我试图用Corona SDK在Lua中进行for循环,但我做错了但我不知道是什么。请参阅下面的代码:

function moveLift(event)
    for j=1,4,1 do
        if event.phase == "began" then
            markY = event.target.y

        elseif event.phase == "moved" then
            local y = (event.y - event.yStart) + markY
            event.target.y = y

        elseif event.phase == "ended" then

            if (hasCollided( event.target, hotSpots[j] )) then

                print("hasCollided with floor: ", hotSpots[j].floor)

                if (event.target.destination == hotSpots[j].floor) then
                    print("correct floor")
                    succesfullPassengers = succesfullPassengers + 1

                    if succesfullPassengers == PASSENGER_AMOUNT then
                        print("game over")
                    end
                else
                    print("Wrong! elevator has collided with floor: ", hotSpots[j].floor)
                end
            end
        end
        return true
    end
end

我在这里尝试做的是检查何时将电梯拖放到屏幕上的地板上。我创建了热点(基本上是hitbox,目前作为艺术占位符)并将它们放在hotSpot表中,如下所示:

-- Create elevator hotspots
for k=1,4,1 do
    hotSpots[k] = display.newRect( gameAreaGroup, 0, 0, 50, 75 )
    hotSpots[k].alpha = 0.25  --Show hotspots with alpha
    hotSpots[k].floor = k -- The floor id
    print("Created hotspot on floor: ",hotSpots[k].floor)
    hotSpots[k].x = display.contentWidth *0.5
    hotSpots[k].y = firstFloor - (FLOOR_HEIGHT * k)
    hotSpots[k]:setFillColor( 255,0,0 )
    hotSpots[k]:addEventListener( "tap", returnFloor ) -- Check floor value
    gameAreaGroup:insert(hotSpots[k])
end

我检查每个热点是否都有一个唯一的底层值,并带有一个名为returnFloor的测试函数,它们具有(1,2,3,4)。当我把电梯拖到一楼时,我收到了消息"错了!电梯已与地板相撞:1",但在任何其他楼层我收到消息:" hasCollided with floor:1"。所以我的moveLift函数中的for循环一定有问题,因为它只返回1楼而不是任何其他楼层。

PS:正确的楼层是4楼,顶层。

2 个答案:

答案 0 :(得分:3)

你有"返回true"在你的for循环中,所以它永远不会超过j = 1。我想你可能需要在最后的if语句中或者在" end"之下移动该语句。在它之后(不知道完整的逻辑,我不确定返回的值是用于什么)。

答案 1 :(得分:0)

最后一行代码不应该是end end return true end end end end end return true end所以返回是在循环完成之后。