3DGS脚本翻译(3)-函数

Workshop 03: 函数

我希望你已经阅读了以前的文章,讲变量的那章。我不了解你,但我对那些定义却实学到了很多。这章将会教你很多有趣的关于函数的新东西。

来看个小例子:

function add_numbers( )
{

    a = 3;

    b = 5;

    c = a + b;

}

看到什么了吗?函数不过就是个综合陈述。它由一些符合C-Script的代码组成。来看看这些函数都有些什么:

1.一个函数由关键字function定义并且带上圆括号()。

2.函数体应该写在一对大括号的内部{ }

3.函数体由多行C-Script代码组成,用分号结束。

4.函数名没有很大限制,但你应该按照为变量命名那样的惯例。

5.不能为变量和函数起一样的名字,这会导致错误。

如果你能阅读这篇指南我希望你知道自己的年龄。不是按年,而是按天!什么,你不知道?你想我们写个函数来计算天数?OK,让我们试着写个函数来计算我或你出生后度过的天数。这会用到一些变量,因此我们最好先定义它们:

var my_age = 33; //你的年龄 (按年算) 在这里
var days_a_year = 365;

var number_of_days;

到现在没什么新东西。我们定义了3个变量,两个放了初始值,因为我知道自己的年龄和一年由365天。我有些紧张-这函数会工作吗?

我知道如何开始。我写关键字function接着写函数名,叫compute_days

function compute_days()
{

我没忘记写函数名后面的括号,并且加上了第一个大括号。
 
现在来到紧张的部分:我如何告诉引擎来计算天数?等等……如果我用计算器我会怎么做?我会象下面这样:

number_of_days = 33 x 365 // number_of_days 是结果的名字

现在看看变量,我会这样做:

number_of_days = my_age x days_a_year

这行看起来象C-Script但我们先要处理两个小bug
C-Script使用*来表示乘法,不是x
-每行代码都应该以分号结束

OK,所以我们的函数应该看起来这样:

function compute_days()
{

    number_of_days = my_age * days_a_year;

}

我记住了要加上第二个大括号。我很好奇这函数能不能工作,因此我准备了个小脚本文件来测试。打开Sed,选择选项-配置,选择script03来运行:

打开script03文件在workshop03文件夹中:

代码看起来很简单,不是吗?我们已经知道了如何使这些变量工作,我们知道了如何写注释……复制函数compute_days从这篇文章并粘贴在main()函数之前:比如第26行:

来测试运行我们的脚本文件:

它工作了……但什么都没发生!我可以看到蓝色的屏幕和一个0……我只有0天大?我想我大多了!

代码肯定有什么错误。我知道我复制的函数肯定正确!我该怎么做?

我们写了个函数假定可以运行,但我们没“叫”它,我们没让他运行。想象一下你想庆祝你的生日并雇了个乐队。它们到了你的房子并且做在角落什么都没做,等着你的命令。你站在这里,不告诉它们开始演奏,并且想知道为什么你听不到它们的音乐……我们的函数也发生了同样的事情:写了却没叫它运行.

OK,现在我们准备开始:我如何运行新的函数?别忘了我们的可信赖的朋友-控制台。按测试运行,按TAB来显示控制台并输入以下文字:

compute_days( );

太神奇了!它工作了!我有12045天大!

 

OK,现在激情已经被减少了,我开始感到不舒服:我每次运行脚本都要打开控制台并键入我的函数名吗?答案是否定的,我们可以调用任何脚本内的函数。来键入调用函数这行到main函数内部,就像下面这样:

到了测试运行的时候了……

OK,这次它工作了,但我不确定什么发生了,是main函数特殊还是什么?是的,main是预先定义的函数,所以别创建其他的函数叫main。这个特殊的函数会自己运行。来看看main函数里面的代码:

function main()
{

     level_load (work03_wmb);

     compute_days(); //我增加了这行

}

代码载入名叫work03_wmb的关卡并且调用我们的函数。OK,现在看下我们如何调用那函数:我们写下函数名带上括号,代码行末尾加上分号。听起来很合理,不是吗?

重要提示:先写函数的代码然后在调用。引擎和你读书一样:从上往下读脚本,一行接一行。如果我这么写:

function main()
{

     level_load (work03_wmb);

     compute_days();

}

function compute_days()
{

    number_of_days = my_age * days_a_year;

}

引擎会说:OH,这是main函数,我知道;我需要每次都运行它。它现在说什么?我要载入一个名叫work03_wmb的关卡……我知道这个关卡吗?Sorry,我当然知道,它在script03文件的13行定义了,在main函数前面。OK,接下来是什么?Compute_days( )。这是什么函数?我不知道!我不知到它想让我干什么。我要去显示一个错误消息并休息一下。

别忘了先定义你的函数,否则以使用时引擎会抱怨。你也可以看到为什么健全的人都不想共享它们的3DGS副本给“朋友”或同事:没个引擎都有自己独特的注册名字和数字,因此如果我想共享我的引擎给某人,Conitec会穷追不舍的抓住并惩罚我……相信我,它们爱好这个!

也许你想知道为什么这次不需要建立关卡。我已经决定给你建造个关卡,引擎已经在workshop03文件夹中找到并载入。如果你想建造wmb关卡文件,启动Wed,打开work03并建造它。

你渴望去学到更多吗?我们愉快的C-Script世界旅程证明是很简单的,不是吗?下个教程会告诉我们如何创建面板:显示所有图形等的基础。只要你看到以个图片或图形在屏幕上,这肯定有个面板定义在它后面。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值