(点击图片进入关卡)
食人魔认为围栏可以阻止游戏大师。
简介
当一个物体接触另一个物体时,它会触发一个 "collide" 事件。
使用 "collide" 事件与使用 "collect" 事件类似:
def onCollide(event):
who = event.target
withWhat = event.other
who.say("I collided with " + withWhat.id)
请注意,某些对象不会导致冲突! 像单位和围栏一样。
默认代码
敬请期待!
概览
" collide " 事件类似于 "collect" 事件。 它有类似的事件数据和触发器,当你踩一些东西。 然而, "collide" 与"hard" 物一起工作,如障碍物或单位。
出于性能原因,避免为许多对象分配 "collide" 事件处理程序。 尝试选择更重要的对象。
例如,如果您只想跟踪玩家和墙壁的碰撞, 那么最好为玩家分配事件处理程序而不是所有的墙。
不要混淆事件数据中的 target 和 other 属性。 "collide" 事件是双向事件:
player = player.spawnPlayerXY("knight", 10, 10)
wall = game.spawnXY("fence", 20, 20)
def onCollide(event):
subject = event.target
object = event.other
wall.on("collide", onCollide)
player.on("collide", onCollide)
在给定的例子中,当 player 与 wall 碰撞时,事件触发两次 并且 onCollide 函数也被调用两次。 但是, target和 other 将被交换:
- 玩家的事件 - target - > player , other - > wall
- 墙上的事件 - target -> wall , other -> player
狂战士 解法
# 蘑菇允许玩家摧毁围墙一段时间。
player = game.spawnPlayerXY('captain', 12, 34)
player.maxSpeed = 15
game.addMoveGoalXY(76, 34)
ui.track(game, "time")
# 蘑菇动力的持续时间。
game.powerDuration = 3
# 蘑菇能量到期的时间。
game.powerEndTime = 0
# "mushroom"s 是没有默认效果的收藏品。
game.spawnXY("mushroom", 12, 52)
game.spawnXY("mushroom", 12, 16)
game.spawnXY("mushroom", 36, 16)
game.spawnXY("mushroom", 36, 52)
game.spawnXY("mushroom", 56, 12)
game.spawnXY("mushroom", 56, 56)
game.spawnXY("mushroom", 56, 34)
# "collect" 事件的事件处理程序。
def onCollect(event):
unit = event.target
item = event.other
if item.type == "mushroom":
# "scale" 改变了单位的视觉尺寸。
unit.scale = 2
game.powerEndTime = game.time + game.powerDuration
unit.say("ARRRGH!!!")
# "collide"事件的事件处理程序。
def onCollide(event):
# 事件拥有者与某事物相撞。
unit = event.target
# 单位碰撞的对象。
collidedObject = event.other
# 如果它是围墙。
if collidedObject.type == "fence":
if unit.scale == 2:
# 对collidedObject使用 "destroy" 方法。
collidedObject.destroy()
# 将onCollide分配给玩家的 "collide"事件。
player.on("collide", onCollide)
# 将onCollect分配给播放器上的 "collect"事件。
player.on("collect", onCollect)
def checkTimers():
# 如果游戏时间大于game.powerEndTime
if game.time > game.powerEndTime:
if player.scale == 2:
# 将玩家的比例设置为1。
player.scale = 1
while True:
checkTimers()
本攻略发于极客战记官方教学栏目,原文地址为: