代码:
Player = { } Player[1] = { x = 200, y = 50 }
这将存储玩家在屏幕上的x、y位置。我们将让玩家从 x 200、y 50 的位置开始。
现在开始我们的主循环。输入如下代码:
代码:
while true do
pad = Controls.read()
screen:clear()
在下一部分代码中我将引入一个新的循环命令。就是“for”循环。我先举个例子让你了解它的工作方式,无需放在你的代码中。这个例子通过使用一个小循环打印了5个玩家的武器。
代码:
for a = 1,5 do
screen:print(10, 10, Player[a].weapon, green)
end
要使用 for 循环,你要赋予一个临时变量起始值和终止值。
在上文中我们说 "for a = 1,5 do",这意味着创建一个循环,其变量 a 的起始值为 1,终止值为 5。你可以理解为“a 等于 1 至 5”。
然后在循环中我们要打印玩家的武器到屏幕上。
最后一行是 end 语句,必须使用以终止循环。
这样,该循环将不断重复直到 a 等于终止值,然后循环终止。第一次循环执行时 a 等于 1。下一次循环时 a 将等于 2,然后是 3,然后是 4,最后是 5。这样就可以快速的将玩家 1 至 5 的武器都打印到屏幕上。当然。实际操作时你需要更改 print 命令的屏幕坐标,不然就都打印到一起去了。但是这展示了该循环的用法。在 for 循环中你也可以根据需要使用 if 语句。
我们将使用这个命令把我们的grass图像平铺在整个屏幕上。输入下述代码,然后我会解释。当然,如果要做一个带卷轴之类的复杂游戏,使用平铺引擎将是更好的办法,不过目前我们不需要用它。
代码:
for a = 0, 14 do
for b = 0,8 do
screen:blit(32 * a, 32 * b, grass)
end
end
这里我们在一个 for 循环中嵌套了又一个 for 循环!这将把 grass 图像粘贴到整个屏幕上。横向贴 15 幅图,纵向 9 幅图。请注意,我们设定起始值为 0 而不是 1,这样图像会从屏幕最左边贴起。
现在让我们再贴一些图像。
代码:
screen:blit(100,100,flower)
screen:blit(300,220,flower)
screen:blit(Player[1].x,Player[1].y,player)
这一段就是简单的贴上两幅 flower 图像,还有 player 的图像。很快,当我们使用移动按键时我们将在每次循环中让玩家的坐标随着按键的按下而改变。使用上述 blit 命令我们的 player 图像将自动粘贴到屏幕的正确区域。
现在让我们加上那些按键,以检测是否按下了方向键。输入下述代码:
代码:
if pad:left() and Player[1].x > 0 then
Player[1].x = Player[1].x - 2
end
if pad:right() and Player[1].x < screenwidth then
Player[1].x = Player[1].x + 2
end
if pad:up() and Player[1].y > 0 then
Player[1].y = Player[1].y - 2
end
if pad:down() and Player[1].y < screenheight then
Player[1].y = Player[1].y + 2
end
这些代码将检测我们是否按下了“上下左右”键。使用 and 语句同时确保我们没有超出屏幕边界。既然屏幕的最左侧和最顶端的坐标是 0,我们只要检查我们的位置是否大于 0 即可。其他部分我们使用 screenwidth 向右走,screenheight 则用来向下走。这些变量我们之前已创建。如果我们的位置通过了 if 测试,则玩家的 x 或 y 坐标递增或递减 2 点。每次主循环执行都会将 player 图像粘贴到提供给它的新位置。