繁体   English   中英

Haxe-代码拒绝工作

[英]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问题之后,仍然存在以下问题:

  • 我的OnFrameEnter或Update调用都不跟踪。 为什么?
  • 从DisplayObject扩展我的Game类会使事情变得停滞不前,而且永远也不会进入我的任何其他代码,无论我是否调用super(); 在构造函数中。

更新:由于第一个问题是一个单独的问题,我将其分解为另一个问题。

从AS3语言参考:

DisplayObject是一个抽象基类; 因此,您不能直接调用DisplayObject。 调用新的DisplayObject()会引发ArgumentError异常。

因此,基本上,您应该扩展ShapeSprite而不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM