swf嵌入后直接访问Sprite

时间:2010-12-18 09:25:30

标签: actionscript-3 sprite embedding

我有以下课程:

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

 }

}

但是要从这个类外部访问sprite属性,我必须做类似

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

有没有办法直接访问这些属性?我尝试制作 this = new new swfShip(),但这不起作用。

3 个答案:

答案 0 :(得分:1)

如果您的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;
  }
}

答案 1 :(得分:0)

您创建了扩展Sprite的类,但它只将其他sprite(ship)添加到给定的父级。它包含船,但它不是船本身。将邮件addChild(ship)发送给自己,然后根据需要使用new Ship()

答案 2 :(得分:0)

您可以添加方法setPosition(x:int, y:int)来更轻松地完成此操作。 您也可以使用with语句(有关详细信息,请参阅here