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)
     
     
  • 相关阅读:
    HashMap看这篇就够了
    01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】
    01 语言基础+高级:1-8 File类与IO流_day08【 File类、递归】
    01 语言基础+高级:1-6 集合_day02【Collection、泛型】
    数据库相关的收藏文章
    SSM到Spring Boot-校园商铺平台
    01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】
    在Mac OS X系统中的十大简单实用使用技巧
    轻松测试你的词汇量
    程序员,你应该懂de
  • 原文地址:https://www.cnblogs.com/codecombat/p/12736257.html
Copyright © 2011-2022 走看看