Прямой доступ к Sprite после вставки SWF - PullRequest
0 голосов
/ 18 декабря 2010

У меня есть следующий класс:

package  {
 import flash.display.Sprite;
 import flash.events.KeyboardEvent;
 import flash.ui.Keyboard;

 public class Ship extends Sprite {
  private var parentStage:Sprite;
  public var ship:Sprite;
  [Embed(source = '../lib/ship.swf')] private var swfShip:Class;
  public function Ship(parent:Sprite) {
   this.parentStage = parent;
   ship = new swfShip();
   parent.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
   parent.addChild(ship);
  }

  private function keyDown(e:KeyboardEvent):void {
   switch (e.keyCode) {
    case Keyboard.RIGHT:
     ship.x += 10;
    break;
    default:

    break;
   }
  }

 }

}

Но чтобы получить доступ к свойствам спрайта извне этого класса, я должен сделать что-то вроде

ship = new Ship(this);
ship.ship.y = 320;
ship.ship.x = 320;

Есть ли способ доступасвойства напрямую?Я попытался сделать this = новый новый swfShip () , но это не сработало.

Ответы [ 3 ]

1 голос
/ 18 декабря 2010

, если ваш Ship класс не будет расширяться Sprite (вам действительно не нужно расширять его в соответствии с вашим кодом), лучшим способом будет:

 public class Ship{
  private var parentStage:Sprite;
  public var ship:Sprite;
  //...
  public function set x(newval: int):void{
     //check value
     ship.x = newval;
  }

  public function set y(newval: int):void{
     //check value
     ship.y = newval;
  }
}
0 голосов
/ 18 декабря 2010

Вы можете добавить метод setPosition(x:int, y:int), чтобы сделать это проще.Также вы можете использовать оператор with (подробности см., Например, здесь )

0 голосов
/ 18 декабря 2010

Вы создали класс, который расширяет Sprite, но добавляет только другого спрайта (корабля) к данному родителю.Он содержит корабль, но это не сам корабль.Сделайте Ship addChild(ship) для себя, а затем используйте new Ship(), как вам нравится.

...