2012-11-28 10 views
0

的主要代碼:multibitmap器定心spirtes AS3

package { 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 
    import flash.net.URLVariables; 
    import flash.net.URLRequest; 
    import flash.events.Event; 
    import flash.display.BitmapData; 
    import flash.geom.Rectangle; 
    import flash.geom.Point; 
    import flash.display.DisplayObject; 
    import flash.display.Bitmap; 

    public class Init extends Sprite { 

     var rects:Array, 
     numRects:int = stage.stageWidth/_width, 
     _width:Number = 20, 
     _height:Number = 80, 
     _rotation:int = 0, 
     _vr:Number = 3; 

     public function Init() { 

      init(); 
     } 

     function init():void 
     { 
      rects = new Array(); 
      var bitmap:BitmapData = new slider(); 
      var _point = new Point(); 
      for(var i:int = 0; i < numRects; i++) 
      { 
       var _rect = new Rectangle(i * _width, 0, _width, 80); 
       var smallBD:BitmapData = new BitmapData(_width, 80); 
       smallBD.copyPixels(bitmap, _rect, _point); 
       //var d:Bitmap = new Bitmap(smallBD); 
       var rect:Rect = new Rect(smallBD, _width, _height); 
       rect.x = i * _width + _width/2; 
       addChild(rect); 
       rects.push(rect); 
      } 

      addEventListener(Event.ENTER_FRAME, onEnterFrame); 
     } 

     function onEnterFrame(e:Event):void 
     { 

      for(var i:int = 0; i < numRects; i++) 
      { 
       rects[i].rotationY += _vr; 
      } 

      _rotation += _vr; 
      if(_rotation % 180 == 0) 
      { 
       removeEventListener(Event.ENTER_FRAME, onEnterFrame); 
      } 

     } 


    } 

} 

這是RECT類:

package { 
    import flash.display.Sprite; 
    import flash.utils.ByteArray; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 

    public class Rect extends Sprite { 

     private var bitmap:BitmapData, 
     _width:Number, 
     _height:Number; 
     public function Rect(bitmap:BitmapData, width:Number = 20, height:Number = 80) { 

      this.bitmap = bitmap; 
      this._width = width; 
      this._height = height; 
      init(); 
     } 

     function init():void 
     { 
      graphics.beginBitmapFill(bitmap, null, true, true); 

      graphics.drawRect(-_width/2, 0, _width , _height); 

      graphics.endFill(); 


     } 

    } 

} 

我將所述導入的圖像成片,每片加入到每個矩形子畫面,所以我正在製作一個旋轉效果,但問題是,當我使它不能集中精靈時,所以我製作了(-_width/2)-技巧,以x軸爲中心將每個精靈居中,然後添加到x位置,添加_width/2,但我無法弄清楚爲什麼圖像會變形,你可以通過歌廳一個780×80的圖像 enter image description here

+0

添加的圖像可以通過導入到flash庫中對此圖像進行測試,並告訴我我在做什麼錯誤 – Zecrow

+0

如果您在drawRect方法AND + _width/2中刪除了-_width/2,它會工作良好,但旋轉會在左上角,那對我不利。 – Zecrow

+0

deformatting是什麼意思? –

回答

0

嘛,看到你使用beginBitmapFill()爲了讓您的矩形試試這個代碼,你可以自由地分配在那裏將它吸引。你似乎需要你的矩形將圍繞它的中心旋轉,而不是左上角。你做得很好寫-_width/2爲起始X,現在你只需要編寫-height/2爲出發Y.

graphics.drawRect(-_width/2, -_height/2, _width , _height); 

這會讓你獲取的位圖有它在你的精靈的(0,0)位置中心,使任何旋轉你應用將使精靈圍繞其繪製矩形的中心。一般來說,如果您將旋轉應用於顯示對象,它總是圍繞其自身旋轉(0,0),所以如果您嘗試進行補償,請寫入變換矩陣(在SO中可用的幾個示例,例如this one ),或者繪製你的精靈,讓(0,0)在你想要旋轉的點上。