代码:
screen.waitVblankStart()
screen.flip() end
保存并运行你的程序,看看动起来的定时器吧。
12——碰撞演示
本课我们讲解如何在 lua 中制作一些简单的碰撞。本方法使用盒式碰撞,没有达到像素级精度。因为这是你的第一次碰撞尝试,所以简单一点好。
我们将要做的这个小演示将使用一个可移动的玩家角色。屏幕上还有三个实施了碰撞效果的方块。玩家将无法穿过这些方块。
首先我们创建两个要用的色彩。一个用于玩家,一个用于我们的方块。
代码:
green=Color.new(0,255,0)
white = Color.new(255,255,255)
接着创建玩家和方块要用的图像。先创建空的 32x32 的方块,然后用我们刚刚创建的颜色填充它们。
代码:
player = Image.createEmpty(32,32)
player:clear(white)
block = Image.createEmpty(32,32)
block:clear(green)
现在我们需要创建一个数列来存放我们的玩家信息。本演示中就是简单的保存玩家的 x 和 y 坐标位置。
代码:
Player = { x = 30, y = 100 }
接下来我们要定义两个变量,存储我们玩家图像的高和宽。这些值将用于我们的碰撞函数中。记住我们刚才是以 32x32 创建图像的,所以那就是我们要用的值。
代码:
playerHeight = 32
playerWidth = 32
然后,为我们的三个方块也创建一个数列来存储信息。自然,我们要存储每个方块在屏幕上所处的 x,y 值,还有每个方块的宽度与高度。我们使用 width() 和 height() 命令来自动从我们刚才创建的方块图像中获取这些值。代码如下:
代码:
Block = {}
Block[1] = { x = 100, y = 80, height = block:height(), width = block:width() }
Block[2] = { x = 300, y = 30, height = block:height(), width = block:width() }
Block[3] = { x = 200, y = 58, height = block:height(), width = block:width() }
现在让我们写一个函数让玩家动起来。每次循环都会调用这个函数以检查移动。如果你认真学了前面的课程,应该不难理解下面的代码:
代码:
function movePlayer()
pad = Controls.read()
if pad:left() then
Player.x = Player.x - 1
end
if pad:right() then
Player.x = Player.x + 1
end
if pad:up() then
Player.y = Player.y - 1
end
if pad:down() then
Player.y = Player.y + 1
end
end
...终于到好玩的地方了。该是时候创建一个函数来检查碰撞是否产生了。这个函数将使得我们能对游戏中任何一个对象检测碰撞,只要在循环中为该对象调用该函数。先看一下整个函数,然后我们来分析一下。
代码:
function collisionCheck(object)
if (Player.x + playerWidth > object.x) and (Player.x < object.x + object.width) and (Player.y + playerHeight > object.y) and (Player.y < object.y + object.height) then