当我点击舞台上的图像时,我正在尝试检索颜色值。我打算用它来为我正在处理的游戏创建一个高度图,让角色在粗糙的地形上移动得更慢(高度图的部分具有特定的颜色值),但我不断收到以下错误:
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));
}
我做错了什么?
答案 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}}的方法,那么效率会更高。