HAXE - 代码拒绝工作
问题描述:
我有以下代码:HAXE - 代码拒绝工作
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问题,下面的问题依然存在:
- 我OnFrameEnter或更新调用跟踪过的无;为什么?
- 扩展从我的DisplayObject Game类使事情陷入停顿,并没有机会到我的任何其他代码,无论我是否在构造函数中调用。
更新:以来的第一个问题是一个单独的问题,我认为拆分出到另一个问题。
答
从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是例如父类的返回类型,这可能会非常棘手,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;
}
我建议,在安装调试播放器:http://www.adobe.com/support/flashplayer/downloads.html。它比释放播放器的性能更差,但是你会得到错误消息和堆栈跟踪(对于FlashDevelop的测试(你似乎使用它),独立调试器应该足够了)。另外,与C#不同的是,在haXe中按照惯例保留了PascalCase类型和枚举构造函数 – back2dos 2010-09-03 13:40:16
哎呀,我以某种方式跳过调试投影仪>。 RCIX 2010-09-03 22:12:11
@ back2dos:oik,它在调试播放器后仍然不起作用。请参阅http://stackoverflow.com/questions/3623363/flashdevelop-haxe-repeated-an-i-o-error-has-occured-errors我的问题 – RCIX 2010-09-03 22:25:59