我有以下代码:
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();
。更新:,因为第一个问题是一个单独的问题,我将其分解为另一个问题。
答案 0 :(得分:6)
来自AS3语言参考:
DisplayObject是一个抽象基类;因此,您无法直接调用DisplayObject。调用new DisplayObject()会抛出ArgumentError异常。
所以基本上你应该扩展Shape
或Sprite
而不是DisplayObject
。
答案 1 :(得分:1)
自
trace("Game constructor");
不打印我会说错误出现在它上面的一行中。
super();
screenBounds = Lib.current.getBounds(new DisplayObject());
graphics = Lib.current.graphics;
Lib.current.addChild(this);
将它们评论出来并一次引入一个,直到“游戏构造函数”不再显示为止。然后你知道从哪里开始调查。
答案 2 :(得分:0)
Andy说,不要使用DisplayObject。我建议你用Sprite。例如,DisplayObject是父类的返回类型,这可能很棘手,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;
}