# 脚本是怎么运行的?
提示
为了方便学习脚本,下边几个选项可以自由选择
【直接去看代码实例】
# 脚本机制
脚本执行原理:
脚本是以事件为触发方式,玩家在事件中填充对应的方法即可
开发者脚本为玩家默认提供了一些全局对象,那么事件所对应的全局对象是ScriptSupportEvent,其他的全局对象可查阅迷你世界API接口
玩家需手动添加事件,比如 Game.Start事件会在游戏开始时执行。详细的事件类型及返回参数等信息可查阅事件系统
添加Game.Start事件的代码:
ScriptSupportEvent:registerEvent([=[Game.Start]=], Game_StartGame)
注意:游戏的事件,除了Game.Start,其他事件都不是必须编写的,用到什么就用什么。
事件的用法:
既然确定脚本是以事件为主线,那怎样能知道游戏中应该用到哪些事件呢?
举几个例子参考一下:
- 当玩家进入房间后就会触发Player.Init事件
ScriptSupportEvent:registerEvent([=[Player.Init]=], Player_Init)
- 游戏开始后会触发Game.Start事件
ScriptSupportEvent:registerEvent([=[Game.Start]=], Game_StartGame)
- 游戏每0.05秒会触发一次Game.Run事件
ScriptSupportEvent:registerEvent([=[Game.Run]=], Game_Run)
- 游戏结束后会触发Game.End事件,也可自行调用
Game:doGameEnd()
结束游戏
ScriptSupportEvent:registerEvent([=[Game.End]=], Game_End)
- 游戏超时结束时会触发Game.TimeOver事件
ScriptSupportEvent:registerEvent([=[Game.TimeOver]=], Game_TimeOver)
游戏中一些行为产生的时候,就可以触发事件,也可以查看更多事件
多个脚本之间关联方法
一个游戏场景中,可能包含多个脚本文件,那么他们之间是怎么互相关联的呢? 我们可以举个例子:
-- 我们想要的效果:在游戏开始时在系统聊天框提示'你好!迷你世界'
-- 第一个脚本名为:test1,内容为:
_G.sayHello = '你好!迷你世界'
-- 第二个脚本名为:test2,内容为:
Game_StartGame = function()
Chat:sendChat(_G.sayHello, 1)
end
ScriptSupportEvent:registerEvent([=[Game.Start]=], Game_StartGame)
--根据上面的讲解,是不是也能看得出这段代码里用到了哪个事件?
注意:我们想在第2个脚本里使用第1个脚本里创建的方法,就要用到 _G 去创建和关联调用
还是不明白
没关系,那就直接看一些示例吧:
← 基础学习案例 事件系统 Event →