Frage

Ich habe den folgenden Code:

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();
 }
}

aber der einzige Spur Ausgang i bekommen ist „Game gestartet“; nichts anderes Tracing oder arbeiten. Warum?

Update: , nachdem das Problem screenBounds fixiert hat, die folgenden Probleme bleiben:

  • Keine meiner OnFrameEnter oder Update-Anrufe immer verfolgen; Warum?
  • von Display meine Spielklasse Erweiterung macht die Dinge zum Erliegen kommen und nie zu einem meiner anderen Code erhalten, unabhängig davon, ob i super(); im Konstruktor aufrufen.

Update: , da das erste Problem eine andere Frage ist, ich bin Splitting, dass eine andere Frage aus in.

War es hilfreich?

Lösung

Von AS3 Sprache Referenz:

Display ist eine abstrakte Basisklasse; Sie können daher nicht direkt anrufen Display. Unter Berufung auf neue Display () löst eine Argument Ausnahme.

Also im Grunde sollte man sich Shape oder Sprite statt DisplayObject.

Andere Tipps

Da

    trace("Game constructor");

nicht druckt Ich würde sagen, der Fehler in einer der Leitungen über ihm ist.

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

Kommentar sie aus und sie einer nach dem anderen einführen, bis „Game-Konstruktor“ länger wird nicht angezeigt. Dann wissen Sie, wo die Untersuchung zu starten.

Wie Andy sagt sie Display nicht verwenden. Ich schlage vor, Sie Sprite verwenden. Display zum Beispiel ist der Rückgabetyp von Eltern, die schwierig sein kann, Display sollte nur verwendet werden, wenn allgemein mit Sprite zu tun, Form, MovieClip- etc ... es sollte nie für die Schaffung eines Anzeigeelement verwendet werden, so dass nur für den Gebrauch wie ein Schnittstelle, wenn Sie mehr generisch mit mehreren Arten von Anzeigeobjekt beschäftigen möchten.

Zum Beispiel ...

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top