0

次のコードがあります。

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 呼び出しはトレースされません。なぜ?
  • super();DisplayObject から Game クラスを拡張すると、コンストラクターを呼び出すかどうかに関係なく、物事が停止し、他のコードにアクセスできなくなります。

更新:最初の問題は別の問題であるため、別の質問に分割しています。

4

3 に答える 3

6

AS3 言語リファレンスから:

DisplayObject は抽象基本クラスです。したがって、DisplayObject を直接呼び出すことはできません。new DisplayObject() を呼び出すと、ArgumentError 例外がスローされます。

したがって、基本的にはShapeorSpriteの代わりに拡張する必要がありDisplayObjectます。

于 2010-09-03T04:40:54.330 に答える
1

以来

    trace("Game constructor");

印刷されていませんエラーはその上の行の1つにあると思います。

    super();
    screenBounds = Lib.current.getBounds(new DisplayObject());
    graphics = Lib.current.graphics;
    Lib.current.addChild(this);

コメントアウトして、「ゲームコンストラクター」が表示されなくなるまで一度に1つずつ紹介します。次に、どこから調査を開始するかがわかります。

于 2010-09-02T22:34:59.663 に答える
0

Andy が言うように、DisplayObject は使用しないでください。スプライトを使用することをお勧めします。たとえば、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;
}
于 2012-10-01T05:39:42.577 に答える