2012-06-18 97 views
0

我试图在单击舞台上的图像时检索颜色值。我打算使用它为我正在制作的游戏创建一个高度图,使得角色在粗糙地形(具有特定颜色值的高度图部分)上移动得更慢,但是我不断收到以下错误:AS3:从位图获取颜色值

TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::[email protected] 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

问题是,你不能仅仅通过将MovieClip转换成Bitmap来转换它,就像你在创建myHeightMap时试图做的那样。要做到这一转换,使用以下内容:

var bitmapData:BitmapData = new BitmapData(heightMap.width, heightMap.height); 
bitmapData.draw(heightMap); 
var myHeightMap:Bitmap = new Bitmap(bitmapData); 

当然,也可能有其他方式来做到这一点。如果在调用此代码之前,您可以找到将heightMap作为Bitmap的方法,那将更有效。

+0

你先生,摇滚!!!!它工作!非常感谢:) 希望我能够upvote,但我没有足够的声誉。 – vagabond80

+0

很高兴帮助!如果你的问题得到解决,那么你应该标记哪个答案最有帮助为'接受'。 :) – CheeseWarlock

+0

啊gotcha。感谢那 :) – vagabond80

0

你如何做它的方式是不完全正确:)

这是你如何转换的电影剪辑,位图:

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。