「网易官方」极客战记(codecombat)攻略-游戏开发2-狂战士-berserker

                                                                         (点击图片进入关卡)

食人魔认为围栏可以阻止游戏大师。

简介

当一个物体接触另一个物体时,它会触发一个 "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()

本攻略发于极客战记官方教学栏目,原文地址为:

https://codecombat.163.com/news/jikezhanji-kuangzhanshi

极客战记——学编程,用玩的!

原文地址:https://www.cnblogs.com/codecombat/p/12800007.html