2013-03-28 4 views
1

Я очень новичок в классах. Ниже приведена попытка создать класс StageObject, который я могу установить ширину, высоту, xy и цвет фона.классы - новичок в классах «это».

package 
    { 
     import flash.display.MovieClip; 



public class StageObjects extends MovieClip 
    { 


     public function StageObjects() 
     { 
      // constructor code 
     } 
     public function setUpStageObject(w:int, h:int, X:int, Y:int, color:Number):void 
     { 
      this.width = w; 
      this.height = h; 
      this.x = X; 
      this.y = Y; 

      this.cacheAsBitmap = true; 
      this.graphics.beginFill(color,1); 
      this.graphics.drawRect(0,0,w,h); 
      this.graphics.endFill(); 
      this.opaqueBackground = color; 
      trace("parameters: " + w + " - " + h + " - " + X + " - " + Y + " - " + color); 


     } 

     /*~~~ adjust position and scale functions ~~~*/ 
     public function adjustXY(ch:Object, par:Object):void 
     { 
      var w = par.width; 
      var h = par.height; 

      ch.x = par.x + (w - ch.width)/2; 
      ch.y = par.y + (h - ch.height)/2; 
     } 

     public function adjustWH(ch:Object, par:Object):void 
     { 
      var w = par.width; 
      var h = par.height; 

     } 

    } 

} 

В основной временной шкале (Flash) Я делаю это:

var titleBkg:StageObjects = new StageObjects(); 
titleBkg.setUpStageObject(imageBoxWidth, titleBkgHeight, -1, imageBoxHeight +1, 0x589199); 
this.addChild(titleBkg); 

Но это не проявляется. Я ссылался на это. неправильно?

+1

установки ширины/высот пустого фрагмента ролика не имеет никакого эффекта. Вы можете удалить 'this.width = w; this.height = h; ' –

+0

Как предоставить содержание клипа? – artcase

+0

Уверенный, если вам не нужна какая-либо функциональность мувиклипа, просто используйте спрайт. –

ответ

1

Вы не создали и не родили свой рисунок должным образом с помощью addChild.

Эффективно ваш этап выглядит следующим образом:

Stage ¬ 
    0: MainTimeline:MovieClip ¬ 
     0: instance1:StageObjects 

И это должно выглядеть следующим образом:

Stage ¬ 
    0: MainTimeline:MovieClip ¬ 
     0: instance1:StageObjects ¬ 
      0: instance1:Shape 

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

package { 
    import flash.display.MovieClip; 

    public class StageObjects extends MovieClip { 
     public function StageObjects(w:int, h:int, X:int, Y:int, color:uint) { 
      // Constructor 
      this.x = X; 
      this.y = Y; 

      var rect:Shape = new Shape(); 
      rect.graphics.beginFill(color,1); 
      rect.graphics.drawRect(0,0,w,h); 
      rect.graphics.endFill(); 
      addChild(rect); 
      trace("parameters: " + w + " - " + h + " - " + X + " - " + Y + " - " + color); 
     } 


     public function adjustXY(ch:Object, par:Object):void { 
      // adjust position and scale functions 
      var w = par.width; 
      var h = par.height; 

      ch.x = par.x + (w - ch.width)/2; 
      ch.y = par.y + (h - ch.height)/2; 
     } 

     public function adjustWH(ch:Object, par:Object):void { 
      var w = par.width; 
      var h = par.height; 
     } 
    } 
} 

и создание объекта будет упрощено:

var titleBkg:StageObjects = new StageObjects(imageBoxWidth, titleBkgHeight, -1, imageBoxHeight +1, 0x589199); 
this.addChild(titleBkg); 
+0

Спасибо! Я думаю, что я начинаю получать это ... (cue зловещая музыка) – artcase

+0

хорошо, что, если бы я хотел создать другой класс «SwapableObject», который расширяет StageObjects. Могу ли я сделать это: «var newswap: SwapableObject = new StageObjects (widthamount, heightamount, xlocation, ylocation, color); – artcase

+0

Вы должны, хотя вам может потребоваться вызвать super() в расширенном классе (я не помню). Попробуйте. :) – Atriace

-1

Я предполагаю, что вы указали ширину, высоту, графику и т. Д. В конструкторе. В моем коде кода я никогда не использовал «это». Если переменная объявлена ​​как класс private/public, компилятор не позволит вам объявить anfother varialbe с тем же именем. Поэтому вам не нужно использовать «это», но это более читаемо, если вы используете «это». (вы будете знать, что это переменная класса).
Добавляете ли вы свою графику на сцену (не заголовокBkg, а объект, который вы создаете внутри объекта titleBkg)? ;)

+0

Мне нужна графика (Sprites aka StageObjects), которая будет масштабируемой на основе значений stageWidth/stageHeight, поэтому не может добавлять их непосредственно на сцену. – artcase

+0

Вы должны * всегда использовать ключевое слово 'this'. Это приводит к дополнительным ограничениям в области видимости при поиске ссылки на память объекта. Да, вы не * должны * использовать ключевое слово, но это должно привести к чуть быстрее времени поиска объекта. –

Смежные вопросы