首页 资讯中心 硬件周边 攻略中心 秘籍中心 在线动漫 CG壁纸  
专题栏目: PSP NDS GBA PS2 PS3 XBOX XBOX360 WII
PSP 游戏资料 | 玩家宝典
您的位置:游狐网 >> PSP >> 玩家宝典 >> 软件教程

菜鸟也能为PSP编程 - Lua Player 编程初级指南

[ 时间:2008-5-6 9:40:37 | 来源:电玩巴士 | 收藏本文 ] 【

8——使用函数

  本课我们将学习怎么使用函数。创建一个函数相当于新建一个属于你自己的Lua命令。你可以将经常使用的代码放进函数中,这样你就可以随时调用了。函数放在主循环之外。一般放在代码开头的变量声明附近比较好。

  首先让我们看一下函数是怎么声明的。检查下面代码:

代码:

function functionName()
(函数中要执行的代码。
可以使用多行代码。)
end

  这就是函数的构成方式,让我们看看下面的示例函数,它将在每次调用时打印一条简单的消息到屏幕。

代码:

function printMessage()
screen:print(100,100, "Functions are fun!")
end

  现在,要想在程序中打印这条消息,就必须在要使用的地方调用这个函数。就上例而言使用下述代码就可以调用该函数,将函数的代码执行一次。

代码:

printMessage()

  这么简单?!呣...恐怕就是这样!使用上述代码将会执行我们先前创建的函数代码。通过调用 printMessage() 就可把 "Functions are fun!" 打印到屏幕上。

  当你开始编写更复杂的程序或游戏时,你将会大量使用函数。在你的主循环中调用函数而不是实际的代码将使你的代码更加整齐易懂。之前我说过函数放在主循环外面,这是对的。但是,从主循环内调用它们是没问题的。

  函数也可以创建来返回一个值。创建函数时加个括号和参数就行。比如说,我们要建个函数将两个数值加起来并把结果返回。首先我们得创建这个函数。看下面:

代码:

function additUp(a, b)
sum = a + b
return sum
end

  请注意,在括号中我们放了字母 "a" 和 "b",其实你可以用任何字母或者甚至单词。它们是用于本函数内部的变量,也只存在与本函数中。因为我们打算将两个数相加,所以我们需要两个变量来存储。在你的函数中可以使用任意多个变量,只要你用逗号分开它们。

  然后我们在函数中创建了一个变量叫 "sum",它将被赋予变量 "a" 和 "b" 相加的数值。等你看到它的调用就会更清楚了。接下来我们使用了一个命令 return,它告诉函数一旦我退出函数将返回一个值给此函数。我们现在要返回的是变量 "sum" 的值。最后,我们 end 了我们的函数。

  现在让我们看看如何使用这个函数,再做一些解释。看如下代码:

代码:

screen:print(100,100,additUp(5,6), green)

  这将把我们函数的结果打印到屏幕上。请注意,在调用函数时我们使用了实际的数值。此例中我们使用了 5 和 6。就是说将数值 5 赋值给 a,数值 6 赋值给 b。现在在我们先前创建的函数内,任何 a 或 b 被使用的地方,都将被我们实际赋予的数值代替。所以函数中 "sum = a + b" 这句话将被解析为 "sum = 5 + 6"。这将把 11 这个数值赋予 "sum" 变量然后返回给我们的 print 命令,打印到屏幕上。

  如果需要我们也可以将此信息存在一个变量中。这样我们就不必在不需要的时候不得不立即使用它,或者在以后重复使用时不用每次都跑一遍整个函数。请看下面:

代码:

myTotal = additUp(5,6)

  这句代码就把我们函数的返回值存储在变量 myTotal 里。myTotal 将等于 11。

  让我们看一下上一讲我们编写的程序。代码应该与下面的类似:

代码:

grass = Image.load("grass.png")
player = Image.load("player.png")
flower = Image.load("flower.png")

screenwidth = 480 - player:width()
screenheight = 272 - player:width()

Player = { }
Player[1] = { x = 200, y = 50 }

while true do
pad = Controls.read()
screen:clear()

for a = 0, 14 do
for b = 0,8 do
screen:blit(32 * a, 32 * b, grass)
end
end

screen:blit(100,100,flower)
screen:blit(300,220,flower)

screen:blit(Player[1].x,Player[1].y,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

screen.waitVblankStart()
screen.flip()
end

  我们可以创建一些函数,让主循环看上去更干净整齐一些。我们可以将所有的方向键检查放入一个函数,还可以将屏幕绘制的代码放入一个函数。这两个都不需要返回值。看看下面的代码,了解函数的使用:

代码:

grass = Image.load("grass.png")
player = Image.load("player.png")
flower = Image.load("flower.png")

screenwidth = 480 - player:width()
screenheight = 272 - player:width()

Player = { }
Player[1] = { x = 200, y = 50 }

-- Function to check player movements
function playerMovement()
pad = Controls.read()
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
end

-- Function to paste images to screen
function pasteImages()
for a = 0, 14 do
for b = 0,8 do
screen:blit(32 * a, 32 * b, grass)
end
end

screen:blit(100,100,flower)
screen:blit(300,220,flower)

screen:blit(Player[1].x,Player[1].y,player)
end

-- Main Loop
while true do

screen:clear()

pasteImages()

playerMovement()

screen.waitVblankStart()
screen.flip()
end

  你看,我们的主循环干净许多了吧。所有复杂的、细节的代码被放到了函数里,而在主循环中我们只需调用它。原先代码中混在循环中的一堆代码都被移走,放到了代码顶端。

  我希望这能帮助学习有关函数使用的知识。以后的教程我们将使用函数了。