基于转换的动画片段绘制位图

时间:2013-04-11 19:10:39

标签: actionscript-3 flash bitmapdata

我正在绘制动画片段的位图,然后我将其输入到我的hittest函数中以测试碰撞。但是,我不太确定如何添加到下面的代码中以考虑并绘制已缩放和/或旋转的动画片段的位图。下面的代码显然只适用于非转换的动画片段。我已经在评论代码中包含了我已经尝试但没有成功的代码。

将绘制的位图添加到舞台时,无论相关的动画片段是否被变换,绘制的位图都会被“切断”并且被错误地绘制 - 它似乎只绘制了一部分。但是,这并不会特别影响非转换动画片段的碰撞测试,但会对转换后的动画片段产生负面影响。

我想要绘制的所有动画片段都是通过图形属性创建的。

           //for example: 
            var mymc:MovieClip = new MovieClip();
            var g:Graphics = mymc.graphics;                        
            g.moveTo(0,0);
            g.lineTo(17.5,0);
            g.lineTo(8.75,17.5);
            g.lineTo(-8.75,17.5);
            g.lineTo(0,0);

主要代码:

for each(var mc:MovieClip in impassable) {  

        //var bMatrix:Matrix = new Matrix();

        //bMatrix.scale(mc.scaleX, mc.scaleY);

        //bMatrix.rotate(mc.rotation * (Math.PI/180));

        var bData:BitmapData = new BitmapData(mc.width, mc.height, true, 0);

        //bData.draw(mc, bMatrix);

        bData.draw(mc);

        var bitmap:Bitmap = new Bitmap(bData);

        bitmap.x = mc.x;
        bitmap.y = mc.y;


        var HitTest:Number = newCollision(bitmap, centerX, centerY, 13.7);

有什么想法?感谢

2 个答案:

答案 0 :(得分:1)

此函数会考虑其变换矩阵创建BitmapData的{​​{1}}克隆,但不会考虑位图过滤器。 (基于this回答。)

DisplayObject

答案 1 :(得分:0)

当您在Matrix上调用连续变换时,排序非常重要,可能会让事情变得更糟。

幸运的是,有一种辅助方法可以让您一次性指定翻译,旋转和缩放,并避免出现这些问题 - createBox

对于你的情况,这样的事情:

var matrix:Matrix = new Matrix();
matrix.createBox(mc.scaleX, mc.scaleY, mc.rotation*Math.PI/180, 0, 0);

(两个零用于x和y平移)