• 「网易官方」极客战记(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

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

  • 相关阅读:
    小程序-文章:微信小程序常见的UI框架/组件库总结
    小程序-文章:微信第三方登录(静默授权和非静默授权)
    asterisk
    Java实现 洛谷 P1423 小玉在游泳
    Java实现 洛谷 P1423 小玉在游泳
    Java实现 洛谷 P1423 小玉在游泳
    Java实现 洛谷 P1035 级数求和
    Java实现 洛谷 P1035 级数求和
    Java实现 洛谷 P1035 级数求和
    Java实现 洛谷 P1035 级数求和
  • 原文地址:https://www.cnblogs.com/codecombat/p/12800007.html
Copyright © 2020-2023  润新知