虽然我已经阅读了很少关于Lua的教程,但我脑子里想到了如何使用Lua的循环,我遇到了麻烦。也许是因为我已经习惯了Python的for-loops?每当玩家在我的游戏中移动时,游戏就会检查地图上的墙是否挡路,并检查NPC是否在目的地的坐标中。
虽然我进行了墙壁检查以完美运行,但这个新的NPC for-loop使得玩家永远不会移动。 checkSpace函数查看NPC列表(当前只有一个NPC),以查看玩家是否可以移动到目的地。
player = {
grid_x = 2,
grid_y = 2,
act_x = 32,
act_y = 32,
transit = false,
direction = {0, 0}
}
npc = {
grid_x = 4,
grid_y = 3,
act_x = 64,
act_y = 48,
}
npcs = {npc}
function checkSpace(grid_y, grid_x, direction)
if map[grid_y + (1 + direction[2])][grid_x + (1 + direction[1])] == 0 then
-- if checkNPCs
for _,v in pairs(npcs) do
if grid_x == v.grid_x and grid_y == v.grid_y then
return true
end
end
end
end
function love.keypressed(key)
if player.transit == false then
if key == "up" then
player.direction = {0, -1}
if checkSpace(player.grid_y, player.grid_x, player.direction) == true then
player.grid_y = player.grid_y - 1
-- move player.direction before the if statement to make the player change direction whether or no there is space to move
player.transit = true
end
end
end
end
编辑:我对程序进行了一些调整,并取得了一些进展。如果checkSpace返回True,则不修改按键程序,而是修改程序,以便在不是障碍的情况下返回false。
if key == "up" then
player.direction = {0, -1}
if checkSpace(player.grid_y, player.grid_x, player.direction) == false then
player.grid_y = player.grid_y - 1
-- move player.direction before the if statement to make the player change direction whether or no there is space to move
player.transit = true
end
我已经得到了一个非常基本的(实际上无用的)for循环使用我的程序,但如果我尝试用它做更高级的任何事情,那么我得到错误,我的玩家角色不会移动。< / p>
for nameCount = 1, 1 do
if grid_x + direction[1] == npc.grid_x and grid_y + direction[2] == npc.grid_y then
return true
else
return false
end
end
我已在此位置发布完整代码:http://pastebin.com/QNpAU6yi
答案 0 :(得分:0)
我会认为你的意思是你遇到了麻烦:
for _,v in pairs(npcs) do
if grid_x == v.grid_x and grid_y == v.grid_y then
return true
end
end
其中npcs是
npcs = {npc}
这是一个包含一个项目的表,即npc,它本身就是
npc = {
grid_x = 4,
grid_y = 3,
act_x = 64,
act_y = 48,
}
因此for
循环只涉及一对(一次迭代),其密钥被丢弃并且其值为npc,因此grid_x == v.grid_x and grid_y == v.grid_y
将npc的网格X和Y与赋予{的值进行比较{1}},如果匹配则返回true 。带循环的npcs = {npc}是奇数,但我认为这是因为你发布了最小的例子。到目前为止这么好,没有错。
但是,checkSpace
将玩家的当前位置与循环播放的npc的位置进行比较,而您应该检查的是NPC是否在建议目的地:
checkSpace
很难从你的帖子中说这是否会解决你的问题,因为我不认为你提到的症状(checkSpace总是返回true)是正确的,但循环是正确的,谓词是错的,应该像我在上面展示。