connect与signal
<p><strong>信号是一种回调机制。是观察者设计模式的一个实现,配合connect函数使用,是所有MODDER必备的技巧</strong></p>
<p>信号是从对象发出消息的工具,其他对象也可以对此做出反应。要为一个类创建自定义信号,请使用 <strong>signal</strong> 关键字。</p>
<p>以下是关于信号使用的一个范例:
假设我们有2个角色实例,一个是厨师(chef),一个是食客(customer)</p>
<pre><code class="language-python">#厨师实例相关代码
extends Chara
#定义一个菜品准备就绪的信号
signal food_ready
#做菜函数
func cook():
#做菜相关逻辑代码。。。。。。
#菜做好后,广播这个信号,并附带了俩参数,表明是哪个顾客的哪个菜做好了
emit_signal("food_ready", foodName, customerName)</code></pre>
<pre><code class="language-python">#顾客实例相关代码
extends Chara
#取菜函数,参数从信号中获得
func getFood(foodName, customerName):
#取菜相关逻辑代码。。。。。。
</code></pre>
<pre><code class="language-python">#系统相关代码
extends Node
func _ready():
#获得顾客实例
var customer = xxxxx...
#获得厨师实例
var chef = xxxxx....
#将厨师的[food_ready]信号与customer实例的getFood()函数连接,这样厨师在广播这个信号后,将会自动执行customer的getFood()函数进行取菜
chef.connect("food_ready", customer, "getFood")</code></pre>
<p>以上就是有关connect与signal搭配使用的一个完整示例,在传奇生物中,有许多预先定义好的信号供我们使用,例如:</p>
<pre><code class="language-python">#将sys.main对象的"onBattleStart"信号与自身连接,当战斗开始时,会广播此信号,此时自身就会执行doIt函数
sys.main.connect("onBattleStart", self, "doIt")</code></pre>