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
поэтому возвращение происходит после завершения цикла.