Lua для цикла не повторяется должным образом

Я остро нуждаюсь в помощи для цикла. Я пытаюсь пройти цикл for в Lua с Corona SDK, но я делаю что-то не так, но я не знаю, что. Смотрите мой код ниже:

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

Здесь я пытаюсь проверить, когда я перетаскиваю лифт на экране, на каком этаже он приземлился. Я создал горячие точки (в основном хитбоксы и в настоящее время выполняю роль художественных заполнителей) и поместил их в таблицу 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 ответа

Решение

В вашем цикле for есть "return true", поэтому он никогда не пройдет j=1. Я думаю, что вам может понадобиться переместить этот оператор вверх внутри последнего оператора if или ниже "конца", который следует за ним (не зная всей логики, я не уверен, для чего используется возвращаемое значение).

Последние строки кода не должны быть end end return true end end ноend end end return true end поэтому возвращение происходит после завершения цикла.

Другие вопросы по тегам