簡體   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