【发布时间】:2023-03-22 20:47:01
【问题描述】:
我有一个班级UglyLobster 在一个横向卷轴类型的游戏中使用了 AS3 中的人工智能。 UglyLobster 是一个很大程度上是自我操作的类,它根据环境确定它接下来要做什么。在构建这种人工智能时,我发现最简单的解决方案是使用嵌套函数。
但是,我不确定嵌套函数是否会影响性能并导致拖累。这个UglyLobster不限于一个实例;许多将同时运行。我添加了代码来显示我正在尝试做的事情。
public class UglyLobster extends Mob {
//these vars determine what the UglyLobster will do next
public var behavior = "aggro"
private var behaviorStep:int = 1
public function UglyLobster() {
addEventListener(Event.ENTER_FRAME,performBehavior)
}
public function performBehavior(e) {
if (behavior == "aggro") {
aggro()
}
if (behavior == "tranq") {
tranq()
}
}
private function aggro() {
//it is necessary to have multiple steps.
//in step 1, the Lobster could bare its lobster fangs,
//then in step 2, crawl toward a point
//and in step 3, pinch somebody
if (behaviorStep == 1) {
step1()
}
if (behaviorStep == 2) {
step2()
}
if (behaviorStep == 3) {
step3()
}
function step1() {
if (someCondition) {
behaviorStep = 2
} else {
//do whatever happens in step1
}
}
function step2() {
if (someOtherCondition) {
behaviorStep = 3
} else {
//do whatever happens in step2
}
}
function step3() {
if (anotherCondition) {
behaviorStep = 1
} else {
behavior = "tranq"
}
}
}
private function tranq() {
//do nothing
}
}
嵌套函数是完成任务的一种节省内存的方式吗?如果没有,您将如何为UglyLobster 设置人工智能?例子真的很有帮助
【问题讨论】:
-
嵌套函数通常被认为是一种糟糕的实践,通常是一些更大的封装设计模式问题的系统性问题。对内存最不利的是确保正确处理附加到嵌套函数的事件侦听器。
-
嵌套函数在性能或其他方面没有取得任何成就。它们是不好的做法,因为它们是一段不能在代码中重用的代码,因为它们的作用域是函数的本地。
标签: actionscript-3 flash nested-function