无法访问静态方法中的函数/stackoverflow 错误 - Haxe
Cannot access function in Static Method / stackoverflow errors - Haxe
首先,这里有一些背景故事。我正在使用游戏引擎 Stencyl(界面可以比作 Scratch)来教授基本的游戏开发。不幸的是,由于这是一个相当小的团队,我仍然缺少一些有用的内置功能,因此我决定为它创建自己的扩展。我了解 C#、Java 和 UnityScript,但这些扩展必须用 Haxe 编写。我已经尝试了几天在他们的 API 页面上找到我的答案,但这远远超出了我的经验水平。
第一个问题是我只是想使用几个地图函数,但这些方法都是静态的。每次我在第 16 行尝试使用像 mapCount()
这样的函数时,它都会抛出一个错误提示:Cannot access controls in static function
。到目前为止,我已经设法弄清楚这是因为我无法从静态方法调用非静态函数,但我不知道如何解决这个问题(将来可能会出现更多类似的问题)。
第二个问题是,当我取消注释第 14 行并注释掉第 16 行时,游戏可以正常编译,但会因 Whosebug 错误而崩溃。这个函数的参数是:createRecycledActor(actorType, x, y, layerPosition)
这是我的脚本的当前状态,现在没有做太多,但我正在逐步学习这门新语言。如果您需要更多信息,请告诉我!
Ps,顺便说一下,第 15 行中的跟踪函数工作正常。
import com.stencyl.behavior.Script;
import com.stencyl.behavior.Script.*;
import com.stencyl.utils.Utils;
import com.stencyl.models.Actor;
import com.stencyl.models.actor.ActorType;
class MobileGameKit
{
public var controls:Map<String,Actor> = new Map();
public static function CreateThumbstick(mActorType:ActorType, mLocation:Int, mDirectionLock:Int)
{
//createRecycledActor(mActorType, 0, 0, Script.FRONT);
trace("created thumbstick at position: "+mLocation+" with directionlock: "+mDirectionLock);
trace("items in control map: " + Utils.mapCount(controls));
}
}
因为controls
是一个成员变量。即每个 class 个实例都有自己的 controls
。
而静态函数是 class 级别的函数。即每个class(在所有实例中)只有一个函数副本。
因此在静态函数中,您无法访问成员变量,因为它无法知道从哪个实例中查找该成员。
要解决您的问题,请将 controls
设为 static var
,或者将成员控件作为参数传递给您的静态函数。
顺便说一句,该语言已经正式命名为 Haxe(而不是 haXe)多年了。
首先,这里有一些背景故事。我正在使用游戏引擎 Stencyl(界面可以比作 Scratch)来教授基本的游戏开发。不幸的是,由于这是一个相当小的团队,我仍然缺少一些有用的内置功能,因此我决定为它创建自己的扩展。我了解 C#、Java 和 UnityScript,但这些扩展必须用 Haxe 编写。我已经尝试了几天在他们的 API 页面上找到我的答案,但这远远超出了我的经验水平。
第一个问题是我只是想使用几个地图函数,但这些方法都是静态的。每次我在第 16 行尝试使用像 mapCount()
这样的函数时,它都会抛出一个错误提示:Cannot access controls in static function
。到目前为止,我已经设法弄清楚这是因为我无法从静态方法调用非静态函数,但我不知道如何解决这个问题(将来可能会出现更多类似的问题)。
第二个问题是,当我取消注释第 14 行并注释掉第 16 行时,游戏可以正常编译,但会因 Whosebug 错误而崩溃。这个函数的参数是:createRecycledActor(actorType, x, y, layerPosition)
这是我的脚本的当前状态,现在没有做太多,但我正在逐步学习这门新语言。如果您需要更多信息,请告诉我!
Ps,顺便说一下,第 15 行中的跟踪函数工作正常。
import com.stencyl.behavior.Script;
import com.stencyl.behavior.Script.*;
import com.stencyl.utils.Utils;
import com.stencyl.models.Actor;
import com.stencyl.models.actor.ActorType;
class MobileGameKit
{
public var controls:Map<String,Actor> = new Map();
public static function CreateThumbstick(mActorType:ActorType, mLocation:Int, mDirectionLock:Int)
{
//createRecycledActor(mActorType, 0, 0, Script.FRONT);
trace("created thumbstick at position: "+mLocation+" with directionlock: "+mDirectionLock);
trace("items in control map: " + Utils.mapCount(controls));
}
}
因为controls
是一个成员变量。即每个 class 个实例都有自己的 controls
。
而静态函数是 class 级别的函数。即每个class(在所有实例中)只有一个函数副本。
因此在静态函数中,您无法访问成员变量,因为它无法知道从哪个实例中查找该成员。
要解决您的问题,请将 controls
设为 static var
,或者将成员控件作为参数传递给您的静态函数。
顺便说一句,该语言已经正式命名为 Haxe(而不是 haXe)多年了。