Копировать в Bitmap, загруженный в спрайте из Loader - PullRequest
0 голосов
/ 26 февраля 2010

я пытаюсь сделать следующее: Я хочу загрузить внешнее изображение (dest) и отобразить его на сцене, и я хочу загрузить другое изображение (src), которое не будет видно. Когда я удерживаю левую кнопку мыши на изображении, которое появляется на сцене, запускается функция, которая запускает копирование изображения src в dest. На самом деле я хочу воспроизвести эффект царапины на изображении, которое скрывает другое изображение. вот мой код [функция copypixels запускается по событию mouse_move в целях отладки]

package { import flash.display.Sprite; import flash.display.BitmapData; import flash.display.Loader; import flash.display.LoaderInfo; import flash.net.URLRequest; import flash.geom.Point; import flash.geom.Rectangle; import flash.events.Event; import flash.events.MouseEvent;</p> <pre><code>[SWF(width='400', height='300', backgroundColor='#ffffff', frameRate='24')] public class CopyDemo extends Sprite { private const BLADE_WIDTH:Number = 5; private const BLADE_HEIGHT:Number = 5; private var loadedSurpriseAssetContainer:Sprite; private var loadedSurpriseBitmapData:BitmapData; private var loadedFrontAssetContainer:Sprite; private var loadedFrontBitmapData:BitmapData; private var blade:Sprite; private var xmouse:Number; private var ymouse:Number; public function CopyDemo() { loadSurpriseImage("pic1.jpg"); } //-------- loadFrontImage ------------ private function loadFrontImage(url:String):void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onFrontLoaderComplete); loader.load(new URLRequest(url)); } //------- loadSurpriseImage ------------- private function loadSurpriseImage(url:String):void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSurpriseLoaderComplete); loader.load(new URLRequest(url)); } private function onFrontLoaderComplete(event:Event):void { loadedFrontAssetContainer = new Sprite(); loadedFrontAssetContainer.addChild(LoaderInfo(event.target).content); loadedFrontBitmapData = new BitmapData(loadedFrontAssetContainer.width, loadedFrontAssetContainer.height, true, 0x00000000); loadedFrontBitmapData.draw(loadedFrontAssetContainer); addChild(loadedFrontAssetContainer); loadedFrontAssetContainer.addEventListener(MouseEvent.MOUSE_MOVE, startcopy); } private function onSurpriseLoaderComplete(event:Event):void { loadedSurpriseAssetContainer = new Sprite(); loadedSurpriseAssetContainer.addChild(LoaderInfo(event.target).content); loadedSurpriseBitmapData = new BitmapData(loadedSurpriseAssetContainer.width, loadedSurpriseAssetContainer.height, true, 0x00000000); loadedSurpriseBitmapData.draw(loadedSurpriseAssetContainer); loadedSurpriseAssetContainer.addEventListener(MouseEvent.MOUSE_MOVE, saveCoords); loadFrontImage("pic2.jpg"); } private function saveCoords(event:MouseEvent):void { // } private function startcopy(event:MouseEvent):void { xmouse = mouseX; ymouse = mouseY; trace("x=" + xmouse + ", y=" + ymouse); loadedFrontBitmapData.copyPixels(loadedSurpriseBitmapData, new Rectangle(0,0,10,10), new Point(0,0)); } }

}

Несмотря на то, что два изображения загружены в память, а первое показано на сцене, когда события mouse_move запускают соответствующие обработчики, копия не работает. Есть идеи?

1 Ответ

1 голос
/ 26 февраля 2010

Хорошо, я не уверен, что это именно то, что вы пытаетесь сделать, но я думаю, что это, по крайней мере, поможет вам правильно решить вашу проблему. Скопируйте новую версию startCopy, которую я вставил ниже, в свой код. О, а также импортировать flash.display. *; так что у вас есть доступ к растровому изображению.

private function startcopy(event:MouseEvent):void
{
    xmouse = mouseX;
    ymouse = mouseY;
    trace("x=" + xmouse + ", y=" + ymouse);
    loadedFrontBitmapData.copyPixels(loadedSurpriseBitmapData,
                                            new Rectangle(mouseX,mouseY,10,10),
                                            new Point(mouseX,mouseY));      
    var newBitmap:Bitmap = new Bitmap(loadedFrontBitmapData);
    newBitmap.x = 0;
    newBitmap.y = 0;
    addChild(newBitmap);
}

Все, что я сделал, это изменил значения Rectangle и Point, которые вы передаете в функцию copyPixel, так что вы увидите, что фоновое изображение появляется, когда вы наводите курсор мыши на переднее изображение; затем я создал новый объект Bitmap, используя обновленные данные, которые вы получаете от copyPixel, и поместил их на сцену.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...