[英]Haxe — code refuses to work
我有以下代碼:
package ;
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.MovieClip;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.Lib;
import flash.utils.Timer;
/**
* ...
* @author RCIX
*/
class Main
{
static function main()
{
trace("game started");
var game : Game = new Game();
game.Run();
trace("game finished");
}
}
class Game extends DisplayObject
{
var rectX : Int;
var rectY : Int;
var velocityX : Int;
var velocityY : Int;
var screenBounds : Rectangle;
var graphics : Graphics;
public function new()
{
super();
screenBounds = Lib.current.getBounds(new DisplayObject());
graphics = Lib.current.graphics;
Lib.current.addChild(this);
trace("Game constructor");
}
public function Run()
{
trace("Run");
Lib.current.addEventListener(Event.ENTER_FRAME, OnFrameEnter);
velocityX = 1;
velocityY = 1;
}
function OnFrameEnter(event : Event)
{
trace("OnFrameEnter");
graphics.beginFill(0xFFFFFF, 0xFFFFFF);
graphics.drawRect(0, 0, screenBounds.width, screenBounds.height);
graphics.endFill();
Update();
}
function Update()
{
trace("Updating");
if (rectX + 50 > screenBounds.width ||
rectX < 0)
{
velocityX *= -1;
}
if (rectY + 50 > screenBounds.height ||
rectY < 0)
{
velocityY *= -1;
}
rectX += 1;
rectY += 1;
graphics.beginFill(0xFF0000);
graphics.drawRect(rectX, rectY, 50, 50);
graphics.endFill();
}
}
但是我得到的唯一跟蹤輸出是“游戲開始”; 沒有其他東西可以追蹤或工作了。 為什么?
更新:解決了screenBounds問題之后,仍然存在以下問題:
super();
在構造函數中。 更新:由於第一個問題是一個單獨的問題,我將其分解為另一個問題。
從AS3語言參考:
DisplayObject是一個抽象基類; 因此,您不能直接調用DisplayObject。 調用新的DisplayObject()會引發ArgumentError異常。
因此,基本上,您應該擴展Shape
或Sprite
而不是DisplayObject
。
以來
trace("Game constructor");
沒有打印我會說錯誤是在它上面的一行中。
super();
screenBounds = Lib.current.getBounds(new DisplayObject());
graphics = Lib.current.graphics;
Lib.current.addChild(this);
注釋掉它們並一次介紹它們,直到不再顯示“游戲構造函數”。 然后,您知道從哪里開始調查。
正如安迪所說,不要使用DisplayObject。 我建議您使用Sprite。 例如,DisplayObject是parent的返回類型,這可能會很棘手,DisplayObject僅應在與Sprite,Shape,MovieClip等進行一般性處理時使用。它永遠不應用於創建顯示項目,因此只能用於接口,當您想更通用地處理幾種類型的顯示對象時。
例如...
var sp: DisplayObject = cast new Sprite();
var mc: DisplayObject = cast new MovieClip();
setX( sp, 20 );
setX( mc, 20 );
function setX( do: DisplayObject, val: Float )
{
do.x += val;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.