# 脚本是怎么运行的?


  • 开发者脚本是以lua语言为基础,完美结合迷你世界,并提供了很多API接口和功能的脚本语言,使用脚本可以开发出非常多好玩的机制和游戏。

脚本执行原理:

脚本是以事件为触发方式,玩家在事件中填充对应的方法即可

  1. 开发者脚本为玩家默认提供了一些全局对象,那么事件所对应的全局对象是ScriptSupportEvent,其他的全局对象可查阅迷你世界API接口

  2. 玩家需手动添加事件,比如 Game.Start事件会在游戏开始时执行。详细的事件类型及返回参数等信息可查阅事件系统

  3. 添加Game.Start事件的代码:

ScriptSupportEvent:registerEvent([=[Game.Start]=], Game_StartGame) 

注意:游戏的事件,除了Game.Start,其他事件都不是必须编写的,用到什么就用什么。


事件的用法:

既然确定脚本是以事件为主线,那怎样能知道游戏中应该用到哪些事件呢?

举几个例子参考一下:

  1. 当玩家进入房间后就会触发Player.Init事件
ScriptSupportEvent:registerEvent([=[Player.Init]=], Player_Init) 
  1. 游戏开始后会触发Game.Start事件
ScriptSupportEvent:registerEvent([=[Game.Start]=], Game_StartGame) 
  1. 游戏每0.05秒会触发一次Game.Run事件
ScriptSupportEvent:registerEvent([=[Game.Run]=], Game_Run) 
  1. 游戏结束后会触发Game.End事件,也可自行调用Game:doGameEnd()结束游戏
ScriptSupportEvent:registerEvent([=[Game.End]=], Game_End) 
  1. 游戏超时结束时会触发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 去创建和关联调用


还是不明白

没关系,那就直接看一些示例吧:

上次更新: 2019-12-26 10:54:13