如何addChild一个BitmapData或绘制一个BitmapData到屏幕?

时间:2009-07-15 16:13:25

标签: flex flash actionscript-3

我目前正在开发一款Flash游戏,我需要知道如何添加一个BitmapData或者将BitmapData绘制到屏幕上。如果我不能,我怎么能给DisplayObject我的BitmapData?

2 个答案:

答案 0 :(得分:7)

BitmapData对象无法直接添加到屏幕,因为它们不是DisplayObject的后代。如果您想显示BitmapData对象的内容,则需要使用Bitmap,它是bitmapData属性。如果您正在使用Flex,则需要确保将Bitmap放入UIComponent或其中一个子类的实例中。否则,如果您只是在Flash中使用AS3,则可以执行此操作:

    package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.geom.Point;

    public class BitmapDataExample extends Sprite
    {
        public function BitmapDataExample()
        {
            super();

            var canvasSize:uint = 100;
            var size:uint = 5;
            var bd:BitmapData = new BitmapData (canvasSize, canvasSize, false, 0x000000);

            var bmp:Bitmap = new Bitmap (bd);
            addChild(bmp);

            // everything from this point on is just drawing junk into the BitmapData object
            var p:Point = new Point (0, 0);
            for (var y = 0; y < canvasSize; y++)
            {
                p.y = y;

                for (var x = 0; x < canvasSize; x++)
                {
                    p.x = x;

                    if (p.x % size == p.y % size)
                        bd.setPixel(p.x, p.y, 0x00FF00);
                }
            }
        }

    }
}

答案 1 :(得分:5)

以下是一个AIR应用程序的示例,用于说明一种方法,假设我已正确理解问题:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">

    <mx:Script>
        <![CDATA[

            import mx.core.UIComponent;

            private function onCreationComplete():void
            {
                // Some sample bitmap data
                var bmpd:BitmapData = new BitmapData(50, 50, false, 0xFF0000);

                // Create a new bitmap, created from the data
                var bmp:Bitmap = new Bitmap(bmpd);

                // Wrap the bitmap in UIComponent
                var uic:UIComponent = new UIComponent();
                uic.addChild(bmp);

                // Add your UIComponent to the display list
                addChild(uic);
            }

        ]]>
    </mx:Script>

</mx:WindowedApplication>

基本上你需要知道的是你的BitmapData首先需要包装在一个Bitmap对象中,并且生成的Bitmap对象是一个DisplayObject,所以在它被添加到显示列表之前,它需要被包装一个UIComponent实例。

这是一种方式,但同样,它在很大程度上取决于你要特别做的事情,所以如果这不适用于你的情况,请随时回复,我会相应调整。希望它有所帮助!