AS3:从位图获取颜色值

时间:2012-06-18 12:32:46

标签: actionscript-3 bitmap

当我点击舞台上的图像时,我正在尝试检索颜色值。我打算用它来为我正在处理的游戏创建一个高度图,让角色在粗糙的地形上移动得更慢(高度图的部分具有特定的颜色值),但我不断收到以下错误:

TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::MovieClip@2fc84f99 to flash.display.Bitmap.
at testGetColor2_fla::MainTimeline/frame1()

到目前为止,这是我的代码:

import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.MouseEvent;
import flash.display.Sprite;

var container:Sprite = new Sprite();

var myHeightMap:Bitmap = Bitmap(heightMap);

this.addChild(container);
container.addChild(myHeightMap);

container.addEventListener(MouseEvent.CLICK, onClick);

function onClick(e:MouseEvent):void
{
    var obj:Sprite = e.currentTarget as Sprite;

    var myHeightMap:Bitmap = Bitmap(obj.getChildAt(0));

    var pixelValue:uint = myHeightMap.bitmapData.getPixel(mouseX,mouseY);

    trace(pixelValue.toString(16));
}

我做错了什么?

2 个答案:

答案 0 :(得分:0)

你这样做的方式并不完全正确:)

这是将MovieClip转换为位图的方法:

function toBitmap(value:DisplayObject):Bitmap
{
    var bmpData:BitmapData = new BitmapData(value.width, value.height, true, undefined);
    bmpData.draw(value, null, null, null, null, true);

    return new Bitmap(bmpData, "auto", true);
}

然后你可以得到像素。

请记住,RegistrationPoint必须是TOP_LEFT。

答案 1 :(得分:0)

问题在于,您无法像投标MovieClip一样将Bitmap转换为myHeightMap,就像您在创建var bitmapData:BitmapData = new BitmapData(heightMap.width, heightMap.height); bitmapData.draw(heightMap); var myHeightMap:Bitmap = new Bitmap(bitmapData); 时尝试做的那样。要进行转换,请使用以下命令:

heightMap

当然,可能还有其他方法可以做到这一点。如果您在调用此代码之前找到了将Bitmap作为{{1}}的方法,那么效率会更高。