【发布时间】:2014-12-24 07:07:51
【问题描述】:
我急需有关 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
我在这里要做的是检查我何时将电梯拖放到屏幕上的哪个楼层。我已经创建了热点(基本上是 hitboxes,目前用作艺术占位符)并将它们放置在 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”,但在任何其他楼层我收到消息:“与楼层发生碰撞:1”。所以我的 moveLift 函数中的 for 循环一定有问题,因为它只返回第 1 层而不返回任何其他楼层。
PS:正确的楼层是4楼,顶楼。
【问题讨论】:
标签: for-loop lua drag-and-drop coronasdk collision