zoukankan      html  css  js  c++  java
  • 「网易官方」极客战记(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

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

  • 相关阅读:
    Eric 的随机文件名 生成方法
    .NET模板引擎 EFPlatform.CodeGenerator (代码生成器 静态页生成 生成HTML 模板)
    Eric的行政区(省市)下列表控件和标签控件
    下载网页中远程图片的方法
    一起来玩Twister(扭扭乐)
    ASP.NET 安全认证(四)——巧妙实现 Form 表单认证跨站点、跨服务器的单点登录(Single Sign On) .
    DataList的编辑、更新、删除、全选、分页以及 <EditItemTemplate>模版中的DropDownList的数据绑定
    ASP.NET 安全认证(三)—— 用Form 表单认证实现单点登录(Single Sign On) .
    C# 中的委托和事件
    ASP.Net获取当前运行文件的文件名称
  • 原文地址:https://www.cnblogs.com/codecombat/p/12800007.html
Copyright © 2011-2022 走看看