icedream 210 Report post Posted March 12, 2015 概述 请确保在学习本章前已完成Hello World教程和变量和条件语句教程的学习。本章相比前两章较长,但是你将学到更多知识。现在开始吧! 你将学到: 对前两章内容的复习 脚本的第一行,也就是“继承”一个脚本 如何在脚本中使用{}添加提示工具 如何使用道具并将它在编辑器中编辑 如何创造并使用一个函数 脚本的第一行在本章开始之前,让我们复习一下前两章的内容。 打开前两章学习使用的脚本,如果你认真观察,你会发现脚本正式开始的第一行有这样的段落: Scriptname HelloWorldScript extends ObjectReference Scriptname HelloWorldScript extends ObjectReference:任何脚本开头都会有这句话。 Scriptname HelloWorldScript extends ObjectReference: 在此你可以对你的脚本命名,Scriptname是脚本的名称,在任何情况下紧接名称都要写"HelloWorldScript"(注意之间有空格)。 Scriptname HelloWorldScript extends ObjectReference:extends是关键字,它表示继承,也就是这个脚本是以extends右边的项目为基础编写的。 Scriptname HelloWorldScript extends ObjectReference: ObjectReference是该脚本所要继承的类,也就是该脚本的基础和前提。 脚本类的继承实际中任何你编写的脚本都要“继承”其它的脚本,当你继承一个脚本时,你会说:“我的脚本是在这个父脚本后面添加的内容,只不过独立成为一个脚本。” 被继承的父脚本也可以这样说:“你的脚本是按照我的样式写的。” 例如,你想要在一个已存在的脚本后面添加新的脚本内容(以石柱脚本为例),即在脚本"ObjectReference"后面添加你的新脚本内容。如果你想在脚本”Quest"后面添加一个你编写的名为“YourScript”的脚本,你可以写“YourScript HelloWorldScript extends Quest"。其它亦如此。 如果你能得心应手地面对脚本编写,那么你一定对脚本类的继承并不陌生。现在,你要知道哪个脚本是你要继承的那个。 添加工具栏 现在你肯定在考虑第二行应该怎样写?如下所示: {This is my very first script!}当你制作新的脚本并开始Documentation String的编写时,请看 当你的脚本停留在scripts标签时这个工具框将出现: 当你想改变工具框时,请改变双大括号{}之间的内容. 你也可以借助添加工具栏来管理你的道具。如下: 属性 一个属性就像一个变量,但你可以在编辑器中把它与东西关联。 让我们现在开始吧! 在 "int count"一行上方添加脚本: Message property box1 auto {Points to the message box that is shown on the first activation.} Message property box2 auto {Points to the message box that is shown on the second activation.} Message property box3 auto {Points to the message box that is shown on the third activation.} Message property box1 auto:Message的作用是决定box1的类型,是message(这和我们"count"变量定义"int"类型是一样的) Message property box1 auto:这个message的类型不是变量,而是属性(property)。 Message property box1 auto:我们给这个属性命名"box1"(如同我们给变量命名"count")。 Message property box1 auto:auto是一个关键字,我们对属性的定义(不要担心这包含什么高深的意思 ,现在只要记住"auto"是用来定义属性)。 你要注意到大双括号{}。它将提供工具框,让我们看一下:点击file->save. 关闭script窗口. 然后点击石柱的reference窗口上的properties按钮。你将看到属性列表停留在它们的名称上。 创建消息框 现在我们将创建链接目标的消息框。 目标窗口是类"Miscellaneous"的延伸,点击类"Messages".在messages列表上右击,从弹出目录选择"New"。 输入以下内容: ID: myMessageBox1 Message Text: Hello World! This is the first time the player activated the Pillar. 按下图所示创建至少2个消息框: ID: myMessageBox2 Message Text: This is the second time the player activated the Pillar. ID: myMessageBox3 Message Text: It's been three or more times activating the Pillar. 属性与消息框的链接重新打开石柱的属性窗口。 点击"box1"所在的一行然后点击"edit value"按钮。点击"Pick Object"的下拉菜单选择myMessageBox1。然后重复相同的步骤对属性box2,box3分别选择myMessageBox2,myMessageBox3。 然后务必点击"OK"关闭窗口(如果未点击"OK",任何更改将作废),然后保存你的插件。 我们必须在属性box1, box2, box3和消息框myMessageBox1, myMessageBox2, myMessageBox3之间建立链接。 在确信每个消息框和属性建立链接后,我们继续编辑脚本。 在属性中调用函数 现在让我们在游戏中打开这些消息框。 打开并编辑你的脚本,然后将以下这些段落: if count == 1 Debug.MessageBox("Hello, World!") elseif count == 2 Debug.MessageBox("Hello, World. Again!") else Debug.MessageBox("Hello, World. Enough already!") endif替换为: if count == 1 box1.Show() elseif count == 2 box2.Show() else box3.Show() endif我们现在分别在属性box1, box2, box3的消息框中调用函数"Show()",半角句号(.)的右边是被调用的函数("Show()"),左边是需要调用函数的属性(例如:属性"box1")。保存脚本,通过点击OK来关闭关闭编辑参考窗口,然后保存你的插件。然后运行游戏!(COC MolagBalVoiceCell) 你将在每次点击石柱时看到对应的消息框。 (如果出现"cannot call show() on a none object"的警告,请返回确认你的属性与消息框是否已关联,然后再在每个打开的窗口点击OK关闭并保存。 一切顺利完成,接下来我们将学习建立函数! 建立函数 如同我们在程序调试的过程中调用"MessageBox()"函数、以及在属性的对话框里建立"Show()"一样,我们也可以在脚本里建立一个自创的函数,但是我们在调用新函数之前,我们必须创造它。 在脚本底部添加如下内容: Message function GetMessage(int currentCount) Message chosenMessage if currentCount == 1 chosenMessage = box1 elseif currentCount == 2 chosenMessage = box2 else chosenMessage = box3 endif Return chosenMessage endFunction让我们剖析第一行: Message function GetMessage(int currentCount):Message说明这个函数将返回一个消息框。注意这是一个非强制返回函数,不一定要有返回值。 Message function GetMessage(int currentCount):我们说这是这是一个函数,如同我们定义属性时用"property"一样。 Message function GetMessage(int currentCount):GetMessage是函数的名字,然后我们在需要调用时直接调用名字即可。 Message function GetMessage(int currentCount):小括号()里的内容是当我们调用函数时函数的参数,int表明我们要求参数的类型是整型,"currentCount"是参数的名字,我们在需要时只需调用参数的名字,然后函数返回一个数值供我们调用。 然后剖析下一行: Message chosenMessage:我们声明变量的类型是Message。(就如同我们定义"count"的类型是"int"或其它目标类型一样。在这种情况下,我们定义其类型为"Message") Message chosenMessage:我们对变量命名"chosenMessage"。 接下来我们将分别对属性box1, box2, box3建立选择消息框 。(再次注意"=="和"="之间的区别)最后我们添加: Return chosenMessage这些说明当我们调用函数GetMessage()时,它将给我们属性chosenMessage中的消息框。现在我们将在新脚本中应用函数。 将以下段落: if count == 1 box1.Show() elseif count == 2 box2.Show() else box3.Show() endif替换为: GetMessage(count).Show()我们现在调用GetMessage()并对count赋予参数。因为GetMessage(count)将返回一个消息框,我们可以在这里调用Show(),然后消息框将在游戏中出现。现在你的脚本将如下所示: Scriptname HelloWorldScript extends ObjectReference {This is my very first script!} Message property box1 auto {Points to the message box that is shown on the first activation.} Message property box2 auto {Points to the message box that is shown on the second activation.} Message property box3 auto {Points to the message box that is shown on the third activation.} int count ;stores the number of times this object has been activated Event OnActivate(ObjectReference akActionRef) count = count + 1 GetMessage(count).Show() endEvent Message function GetMessage(int currentCount) Message chosenMessage if currentCount == 1 chosenMessage = box1 elseif currentCount == 2 chosenMessage = box2 else chosenMessage = box3 endif Return chosenMessage endFunction当你运行游戏,激活石柱,我们将看到消息框内容。(COC MolagBalVoiceCell)下章预告 基础教程以学习完毕。下章将学习如何制作BOSS。 Share this post Link to post Share on other sites