Haxe:在Main Class中调用Class和Class之外的函数

时间:2013-11-20 01:30:14

标签: game-engine haxe

我想调用一个位于我的Haxe游戏的Main类之外的函数。

我可以使用:addChild(new Bubble(player.x, player.y));

为游戏添加气泡

我想在每个添加的对象中不使用EventListener来更新游戏。

以下代码:Bubble.tick();

从main运行时产生此错误:

  

Bubble没有字段标记

冒泡等级:

package;

import flash.Lib;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.MovieClip;
import openfl.Assets;
import flash.events.Event;

class Bubble extends Sprite
{
    private var newBubble:Bitmap;
    private static var gameBubble:Array<Sprite> = new Array<Sprite>();
    public function new (xpos:Float,ypos:Float) {
        super ();
        this.x = xpos;
        this.y = ypos;
        newBubble = new Bitmap (Assets.getBitmapData ("img/sprite_bubble_16x16.png"));
        newBubble.x = -12.5;
        newBubble.y = -12.5;
        addChild(newBubble);
        gameBubble.push(this);
        trace("Bubble");
    }

    private function tick2(e:Event) {
        this.y -= 5;
        checkPop();
    }

    public function tick() {
        this.y -= 5;
        checkPop();
    }

    private function checkPop() { 
        if(this.y < 0) {
            this.parent.removeChild(this);
        }
    }
}

1 个答案:

答案 0 :(得分:4)

tick是一个成员方法,而不是静态方法。

Bubble.tick()

会查找static public function tick(),而

var b = new Bubble();
b.tick();

会查找public function tick()

静态函数与类绑定,而不是对象的特定实例。成员函数绑定到对象的特定实例,并可以使用this来访问该实例。

希望有所帮助


编辑(回应你的评论):

很难确切地说出你想要做什么,但看起来你希望每个“气泡”慢慢向屏幕底部移动,并在它出现时被移除。

您有两个选择:

1)每个气泡实例都会创建自己的计时器,而tick是一个成员函数(public function tick),它会this.y -= 5等。

2)tick是一个静态函数(static public function tick),它对每个气泡(for (bubble in gameBubble) { bubble.y-=5; ...etc... })进行循环

基本规则:任何静态的东西都无法访问this,因为它不知道你在说哪个泡泡,所以你必须使用静态数组来遍历它们。< / p>