首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问静态方法中的函数/ stackoverflow错误- Haxe

无法访问静态方法中的函数/ stackoverflow错误- Haxe
EN

Stack Overflow用户
提问于 2017-06-29 08:21:14
回答 1查看 450关注 0票数 1

首先,这是一个背景故事。我正在使用游戏引擎Stencyl (界面可以比作Scratch)来教授基本的游戏开发。不幸的是,由于这是一个相当小的团队,我仍然缺少一些有用的内置函数,因此我决定为它创建我自己的扩展。我熟悉C#、Java和UnityScript,但这些扩展必须用Haxe编写。我已经尝试了几天在他们的API页面上找到我的答案,但这远远超出了我的经验水平。

第一个问题是,我只是尝试使用几个map函数,但这些方法都是静态的。每次我尝试在第16行使用像mapCount()这样的函数时,它都会抛出一个错误:Cannot access controls in static function。到目前为止,我设法弄清楚这是因为我不能从静态方法调用非静态函数,但我不知道如何解决这个问题(将来可能会有更多类似的问题)。

第二个问题是,当我取消注释第14行,并注释掉第16行时,游戏将编译得很好,但会崩溃并出现堆栈溢出错误。此函数的参数为:createRecycledActor(actorType, x, y, layerPosition)

这是我的脚本的当前状态,现在没有做太多事情,但我正在逐步学习这门新语言。如果你需要更多的信息,请让我知道!

Ps,第15行的trace函数运行得很好。

代码语言:javascript
复制
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));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-29 10:41:11

因为controls是一个成员变量。也就是说,每个类实例都有自己的controls。而静态函数是类级别的函数。即每个类(在所有实例中)只有一个函数副本。

因此,在静态函数中,您不能访问成员变量,因为它无法知道从哪个实例中查找该成员。

要解决您的问题,请将controls设置为static var,或者将成员控件作为参数传递给静态函数。

顺便说一句,这种语言多年来一直被正式命名为Haxe (而不是haXe)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44814468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档