我迫切需要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楼,顶层。
答案 0 :(得分:3)
你有"返回true"在你的for循环中,所以它永远不会超过j = 1。我想你可能需要在最后的if语句中或者在" end"之下移动该语句。在它之后(不知道完整的逻辑,我不确定返回的值是用于什么)。
答案 1 :(得分:0)
最后一行代码不应该是end end return true end end
end end end return true end
所以返回是在循环完成之后。