zoukankan      html  css  js  c++  java
  • 「网易官方」极客战记(codecombat)攻略-游戏开发2-标准操作规程-standard-operating-procedure

    对于所有单位类型使用相同的 SOP!

    简介

    事件处理程序获取有关触发它们的事件的信息:

    event.target 属性包含执行事件处理程序的单位。

    # 使用event.target,所有单位都可以使用相同的事件处理函数
    def sayHello(event):
        unit = event.target
        unit.say("Hi!")
    game.setActionFor("soldier", "spawn", sayHello)

    默认代码

    # 事件具有诸如event.target之类的属性
    # 这使您可以为许多不同的单位使用相同的事件处理程序。
    game.addDefeatGoal()
    soldier1 = game.spawnXY("soldier", 50, 30)
    soldier2 = game.spawnXY("soldier", 50, 35)
    soldier3 = game.spawnXY("soldier", 50, 40)
    munchkin1 = game.spawnXY("munchkin", 25, 30)
    munchkin2 = game.spawnXY("munchkin", 25, 35)
    munchkin3 = game.spawnXY("munchkin", 25, 40)
    # 这个函数让兽人1攻击它的敌人。
    # 使用event.target使这个函数适用于所有单位!
    def fightEnemies(event):
        while True:
            # 创建一个单位变量,并将事件对象分配给它

     

            # 现在将下面的行改为使用单元而不是兽人 1。
            enemy = munchkin1.findNearestEnemy() # ∆
            if enemy:
                munchkin1.attack(enemy) # ∆
    # 使用game.setActionFor() 将事件处理程序分配给许多单位。
    game.setActionFor("munchkin", "spawn", fightEnemies)
    game.setActionFor("soldier", "spawn", fightEnemies)

    概览

    在之前的关卡中,你做过这样的事情:

    soldier1 = spawnXY("soldier", 10, 10)
    def fightEnemies(event):
        while True:
            enemy = soldier1.findNearestEnemy()
            if enemy:
                soldier1.attack(enemy)

    但是当我们增加更多的士兵会发生什么?

    soldier1 = spawnXY("soldier", 10, 10)
    soldier2 = spawnXY("soldier", 12, 10)
    soldier3 = spawnXY("soldier", 15, 10)

    因为 soldier1 被硬编码到 fightEnemies() 函数中,所以 soldier2 或 soldier3 不起作用!

    相反,我们应该使用 event.target 来知道哪个士兵正在执行事件处理函数:

    def fightEnemies(event):
        while True:
            unit = event.target
            enemy = unit.findNearestEnemy()
            if enemy:
                unit.attack(enemy)

    现在它适用于所有的士兵,以及任何其他类型的单位,如弓箭手或兽人!

    标准操作规程 解法

    # 事件具有诸如event.target之类的属性
    # 这使您可以为许多不同的单位使用相同的事件处理程序。
    game.addDefeatGoal()
    soldier1 = game.spawnXY("soldier", 50, 30)
    soldier2 = game.spawnXY("soldier", 50, 35)
    soldier3 = game.spawnXY("soldier", 50, 40)
    munchkin1 = game.spawnXY("munchkin", 25, 30)
    munchkin2 = game.spawnXY("munchkin", 25, 35)
    munchkin3 = game.spawnXY("munchkin", 25, 40)
    # 这个函数让兽人1攻击它的敌人。
    # 使用event.target使这个函数适用于所有单位!
    def fightEnemies(event):
        while True:
            # 创建一个单位变量,并将事件对象分配给它
            unit = event.target
            # 现在将下面的行改为使用单元而不是兽人 1。
            enemy = unit.findNearestEnemy() # ∆
            if enemy:
                unit.attack(enemy) # ∆
    # 使用game.setActionFor() 将事件处理程序分配给许多单位。
    game.setActionFor("munchkin", "spawn", fightEnemies)
    game.setActionFor("soldier", "spawn", fightEnemies)
     
     
  • 相关阅读:
    英文文法学习笔记(14)分词
    利用别名简化进入docker容器数据库的操作
    英文文法学习笔记(12)形容词
    小知识:在Exadata平台上使用ExaWatcher收集信息
    小知识:调整OCI实例的时区
    小知识:Docker环境缺少vi命令,如何解决
    小知识:Exadata平台去掉密码输错延迟10分钟登录
    英文文法学习笔记(13)副词
    SpringBoot,SpringMvc 参数校验 用法详解
    java 获取项目根路径、获取桌面路径
  • 原文地址:https://www.cnblogs.com/codecombat/p/12736257.html
Copyright © 2011-2022 走看看