gpt4 book ai didi

actionscript-3 - 引用由 Actionscript 3 中的子类定义的函数

转载 作者:行者123 更新时间:2023-12-04 06:47:37 26 4
gpt4 key购买 nike

我正在设置一个系统来管理游戏中的过场动画。然而,我遇到了一个棘手的问题,我很难向谷歌描述它。我需要访问 Flash 告诉我“未定义”的函数。

这就是我所拥有的;

Cutscene 是一个包含所有过场动画基本功能的基类

Cutscene1 扩展 Cutscene,并包含有关单个过场动画的信息。此类信息包括函数和变量。稍后会出现 Cutscene2, Cutscene3,所有这些都扩展了 Cutscene

CutsceneHandler 获取一个Cutscene,确定Cutscene 的下一步,并告诉Cutscene 执行步骤定义的函数。

CutsceneHandler 只接受一个Cutscene

所以我们给这个处理程序一个新实例化的 Cutscene1。 Handler 说“嘿,这是一个过场动画,一切都很酷。”。但是现在,处理程序告诉 Cutscene 执行仅在其子类中定义的功能。处理程序说“哇,Cutscene 类没有这样的功能!”并抛出错误。调用可能未定义的函数。

我们如何解决这个问题?我们如何调用函数有问题吗?我在下面包含了一些简化的代码。

public class CutsceneHandler extends Sprite {

var activeCutscene:Cutscene

public function CutsceneHandler() {
//empty constructor
}

public function beginCutscene(cutscene:Cutscene) {
activeCutscene = cutscene
executeStep(activeCutscene.steps[0])
}

public function executeStep(step:Object) {
if (step.action) {
activeCutscene.action()
}

}

}

__

public class Cutscene1 extends Cutscene {

public var steps = [
{action:someFunction,someImportantDetail:true},
{action:someOtherFunction,someImportantDetail:false}
]

public function Cutscene1() {
//empty constructor
}

public function someFunction() {
trace ("hello!")
}
public function someOtherFunction() {
trace ("goodbye!")
}

}

最佳答案

这听起来像是 command pattern 的工作!

简单来说,这个想法是将每个步骤的细节封装在单独的类实例中,这些实例都使用单个 execute 方法实现一个接口(interface)。您的处理程序类可以通过该接口(interface)调用步骤,而无需知道步骤所属的 Cutscene 的特定子类。

像下面这样的东西应该会让你朝着正确的方向前进。

ICommand 接口(interface):

public interface ICommand {
function execute():void
}

具体命令:

public class HelloCommand implements ICommand {

public function execute():void {
trace("hello");
}
}

public class GoodbyCommand implements ICommand {

public function execute():void {
trace("goodbye");
}
}

过场动画的子类

public class Cutscene1 extends Cutscene {

// Declare steps variable in the base class since
// all subclasses will use it

public function Cutscene1() {
// Define the steps specific to this subclass
steps = [
new HelloCommand(),
new GoodbyeCommand()
];
}
}

处理程序类

// Only extend Sprite if the class needs to be displayed
public class CutsceneHandler {

var activeCutscene:Cutscene

public function CutsceneHandler() {
//empty constructor
}

public function beginCutscene(cutscene:Cutscene) {
activeCutscene = cutscene;
// Cast the step as ICommand and execute it
(activeCutscene.steps[0] as ICommand).execute();
}
}

关于actionscript-3 - 引用由 Actionscript 3 中的子类定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25750866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com