我想调用一个位于我的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);
}
}
}
答案 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>