首页 > 游戏资讯 > 《CS Online(反恐精英online)》【攻略】CSO lua零基础小教室(四)浅谈API

《CS Online(反恐精英online)》【攻略】CSO lua零基础小教室(四)浅谈API

时间:2021-01-03 21:15:23

yrgna1234 (misk) #1 2020-09-22 23:08:16
大家好 我是misk
上次教了大家表(table)的用法
照理来说,有了前三章的文章,您就能看懂API了
不过,我知道如果您从来没碰过程式,绝对是看不太懂
就像是你会ABCDE到Z,但是如果拼在一起您就不会了
所以,这次除了跟大家说明API之外,还会讲解资料型态
希望大家能学会。

另外,本人也不是什幺资讯科的
所以有些部分如果有更详细或错误的资讯,还请您告知喔~
感恩!

如果还没看过之前的文章,请前往:

浅谈档案
1.project.json
简单来说是将game.lua跟ui.lua包装后执行的档案,你可能会问说:可不可以自己加入档案?
答案是可以的。
但我们目前不说明这个,应该说......我们也不太需要。

2.game.lua
这个档案主要是在管理:
游戏规则
角色(玩家或怪物)
装置方块
所以当您想到一个新想法时,却对整体的程式架构还不熟悉,那就请您将这点记起来,方便您建立架构,写出整齐的程式。

3.ui.lua
这个档案主要是在管理:
个人
萤幕介面
一样,当你想了一个新想法,请将这点熟记。

执行方式
通常我们可以将game与ui的互动方式简单的画成一张图。

没错,这样的互动方式就很像是game.lua在发号施令,或是在控制游戏,控制角色。而身为"角色"的玩家则是跟ui有关,例如按键盘这种"个人"的事情就是跟ui有关。

执行档案顺序
如何测试优先顺序?很简单。
我们在game.lua中写一行:print("game")
接着在ui.lua也写一行:print("UI")
意思是说,如果程式跑到game,就会在上次说明的地方(在游戏中按~就能看到)显示"game"这句话,同样的,如果程式跑到ui,就会印出"UI"这行字。

实现结果如下。
实验结果显示是先跑game.lua再跑ui.lua。
(此为顺带一提而已,对写程式并没什幺影响呵呵)

API说明
这边再解释一次API的意思,简单来说就是游戏跟程式之前互动的桥樑,例如说我们在编辑模式中,按下C键可以选择您想建立的方块,装饰或装置方块,而API就跟这些东西一样,你可以选择并使用,只是使用方式并不是创造枪,则是程式码。

接下来,请大家前往CSO API官网。

点进去后,请看左边的Modules,我们目前只会说明game跟ui。
图片红框中的game跟ui就是它们的全部资料了,而下方有什幺Game.Entity、Game.Rule,这些都跟程式的"物件"有关,但是我们目前都会用"表"的方式让大家尽量理解。
意思很简单,你可以想像成Game是一个箱子,里面装着Entity、Rule、Monster......等小箱子,而这些小箱子里面又有很多的小小箱子......,等等会出现Game.EntityBlock当例子(这样层层包装的概念就跟表的概念差不多)。
请注意:Modules中的UI只能在ui.lua中使用,而Game只能在Game.lua中使用。


例子:我们点选Game.EntityBlock。
进去后你会看到4个新东西(小小箱子的分类),分别有Tables,Fields,Methods,Event Callback,这边一一解释。

Tables
意思是说这个下方的资料型态都是表(table),我们可以点Game.EntityBlock.position,它会导引你到这里。
这边它都会详细解释这个表之中的元素有哪些,例如这里就表示这个表"Game.EntityBlock.position"中有三个,分别为x, y, z的元素。而括号之中的int指的是整数,意思是说,你之后在使用或设定时,这些元素都要是整数,不然可能会无法执行。

Field
这个是程式中"物件"的东西,这边您不需要太了解这个,因为这比较难,这边用举例的方式解说。
上方是用Game.EntityBlock做例子,你会问:这是什幺?
其实我们在游戏中用的一个个装置方块,都是个Game.EntityBlock,而这些装置方块(Game.EntityBlock)其实可以说成是一个表(table)(目前先这样解释),而他们的元素呢,就是Field。
在例子中,Field有id、position、onoff,也就是说,您目前可以将Field当成是"表的元素"

Methods
这个一样是物件的东西,这边也一样直接举例。
在上方的例子,你会看到两个东西,分别是
Game.EntityBlock:Create(position)
Game.EntityBlock:Event(arg, index)
没错,你只要看到()就表示这是一个函式,你可以使用Methods下方列出的函式,但这些不能重新宣告。

Event Callback
上方例子中有两个函式,这些跟Methods不同的是:他们可以重新宣告。
也就是说,您可以在程式码中自己宣告您需要的函式内容,这就是跟Methods不同的地方。

以机器来做比较的话,Methods就是只能使用机器,而Event Callback就是你可以组装机器,大约如此。

浅谈物件
它跟表很像,所以我才想说先用表的方式让大家理解,但毕竟这跟表不太一样,所以还是稍微说明物件的原理。
刚刚提到Field跟Methods,而这些都跟物件有关,为了让大家好懂一些,我用饮料机来说明。
饮料机为"物件"
Field就像是饮料机内的冰块、可乐跟果汁(物品元素)
而Method就是倒出饮料机内的饮料(用函式做动作)

像刚刚的Game.EntityBlock例子中,我们可以使用Game.EntityBlock:Create(position)在程式中建立一个装置方块(Game.EntityBlock物件),这样我们就可以在程式中使用这个装置方块的元素跟动作了。

非常感谢大家观看,这次的章节算难,所以请大家多看几遍喔嘿嘿。
然后这次好像没有问题能出了 : (

下一章:

看较旧的 14 则留言

Rollermine Coaster: 09-23 00:19

唯有开一个新的table储存这个资料 例如weaponName[449] = "ShiningHeartRod"

Rollermine Coaster: 09-23 00:20

然后再print(weaponName[449])

misk: 09-23 11:25

[yipyip122:边缘至死] 已在下方回覆了

yrgna1234 (misk) #2 2020-09-23 11:24:34
(我print(Common['WEAPON']['ShiningHeartRod']).然后控制台给了1个KEY 449 请问有没有方法能输入449然后输出ShiningHeartRod呢?)

本人目前想到一个方式
1.创建一个表”temp”。
2.将Common[“WEAPON”]这个表丢进迴圈中,用”temp”记录并交换所有元素跟值。

temp = {}
for I, j in pairs(Common[“WEAPON”]) do
    temp[j] = I
end

这样temp[449]就会等于ShiningHeartRod了。
算是比较懒人的方法哈哈

看较旧的 6 则留言

misk: 09-24 11:04

[p1556230:Rollermine Coaster] 原来是这样 你好像比较适合写教学XD

Rollermine Coaster: 09-24 11:11

最怕就是写文章之类的 宁愿写十个程式 都不想写一个文章https://i2.bahamut.com.tw/editor/emotion/8.gif

Rollermine Coaster: 09-24 11:14

其实getmetatable是印尼大师教的 他比较懂官方的api

专题合集

精彩合集,奇葩无下限

相关文章

精彩推荐

大家还在看

手机版 | 电脑版