2012-06-18 3 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

Вы, сэр, ROCK !!!! Работает!!! Огромное спасибо :) Жаль, что я мог бы поддержать, но у меня недостаточно репутации. – vagabond80

+0

Рад помочь! Если ваша проблема решена, тогда вы должны отметить, какой ответ был наиболее полезен, как «принят». :) – CheeseWarlock

+0

ah gotcha. Спасибо за это :) – vagabond80

0

Путь, как вы делаете это не совсем верно :)

Это, как вы преобразовать мувиклип в Bitmap:

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.