2012-06-08 2 views
1

Я пытаюсь нарисовать мувиклип в bitmapdata и выглядеть так же, как если бы я только что добавил мувиклип непосредственно на сцену. Однако результат сдвигается. Я подозреваю, что это имеет какое-то отношение к происхождению и границам, но не может понять это.Рисование мувиклипа в bitmapdata перемещается вокруг

http://megaswf.com/s/2441986 (один справа есть проблема)

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.display.MovieClip; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.geom.Matrix; 
    import flash.geom.Rectangle; 

    public class Main extends Sprite 
    { 
     public var movieClip:MovieClip; 
     public var bitmapData:BitmapData 
     public var bitmap:Bitmap; 

     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
      addEventListener(Event.ENTER_FRAME, update); 


      // for comparison, this is what I want the result to look like 
      movieClip = new skeletonWalk(); 
      movieClip.x = 200; 
      movieClip.y = 200; 
      addChild(movieClip); 

      // and this it the problem child 
      bitmap = new Bitmap(); 
      bitmap.x = 300; 
      bitmap.y = 200; 
      addChild(bitmap); 
     } 

     private function update(e:Event):void 
     { 
      var bounds:Rectangle = movieClip.getBounds(movieClip); 
      bitmapData = new BitmapData(bounds.width, bounds.height, true, 0x0); 
      bitmapData.draw(movieClip, new Matrix(1, 0, 0, 1, -bounds.x, -bounds.y)); 
      bitmap.bitmapData = bitmapData; 
     } 

    } 

} 

ответ

2

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

Попробуйте исправить нижний край, а не верхний край.

bitmapData.draw(movieClip, new Matrix(1, 0, 0, 1, -bounds.x, maxMCheight - (bounds.y + bounds.height))); 
//maxMCheight is the height of the clip while the sword is risen 
+0

Спасибо, я получил его для работы с использованием вашего метода. Мне также пришлось увеличить размер bitmapdata до maxMCHeight, потому что теперь его немного обрезали внизу. – WgFunstorm

+0

Эй, я на самом деле все еще борется с этим. Я попробовал точно такой же код в другой анимации и посмотрел, что происходит: http://www.swfcabin.com/open/1339163406 Я попытался испортить значения, но не могу найти правильную комбинацию. – WgFunstorm

+0

Это выглядит хорошо для меня ... – strah

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