хорошо .... Я думал, что у меня есть решение. К сожалению, я действительно не знаю flex, но могу предоставить созданные мной классы Blitting.
Я надеюсь, что вы можете использовать эти (или, по крайней мере, идеи воплощены), чтобы найти решение, которое поможет вам. Я верю, что это возможно - я просто недостаточно хорошо знаю объекты Flex, чтобы реализовать их.
Также обратите внимание, что эти классы были созданы для игры, которую я пытаюсь создать, поэтому не стесняйтесь обрезать все, что вам не нужно. Есть также несколько незавершенных методов. Это немного небрежно. : - \
// Oh, and, please ignore my code comments, I tend to talk to myself.
Класс BLOB - это базовый объект для многих из этих классов, состоящий из объекта bitmapData . Прямоугольные и точечные переменные были для моих copyPixels операций; возможно, вы сможете извлечь эти значения из ваших объектов.
package com.lunchmeat317.blitter
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
/**
* ...
* @author lunchmeat317
*/
public class BLOB
// BLOB stands for BLit OBject.
{
// These are the core variables of this class. Debating whether to make these
// internal or protected. Protected is logical, but are getters slower for
// parsing?
internal var data:BitmapData;
internal var rect:Rectangle;
internal var point:Point;
// To be used with scrollrect in order to animate frames. Frameoffset...shit.
// Do I pull these values from rect.width and rect.height? Is this necessary?
// Maybe I should just make these booleans? Perhaps these value can be the
// quotient of the rect dims from the bitmap dims? No idea. (That could help
// with wrapping.)
private var frameoffset:uint;
// Variable that determines whether to blit this object or not. Blitting engine
// will check this condition for each object it blits. True by default.
private var visible:Boolean;
public function BLOB(width:uint, height:uint, x_pos:int, y_pos:int, x_rectpos:uint, y_rectpos:uint, image:BitmapData)
{
data = image;
rect = new Rectangle(x_rectpos, y_rectpos, width, height);
point = new Point(x_pos, y_pos);
visible = true;
data.lock();
}
public function setVisibleState(value:Boolean):void
{
visible = value;
}
public function getVisibleState():Boolean
{
return visible;
}
public function setLocation(location:Point):void
{
point = location;
}
public function getLocation():Point
{
return point;
}
public function move(dx:Number, dy:Number):void
{
point.offset(dx, dy);
}
}
}
Класс BlitLayerCanvas представляет собой bitmapData , к которому вы можете copyPixels () отдельные битовые карты, но они не отображаются на экране, потому что они не добавляются в список отображения. Надеемся, что просмотр этого класса поможет вам скопировать объекты на холст, который существует в памяти, но не отображается. (Совет: если вы знаете, что не собираетесь добавлять его в список отображения, вам на самом деле не нужно использовать контейнерный класс Bitmap .)
package com.lunchmeat317.blitter
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
/**
* ...
* @author lunchmeat317
*/
public final class BlitLayerCanvas extends BLOB
{
public var bloblist:Vector.<BLOB>;
public function BlitLayerCanvas(width:uint, height:uint, x_pos:int, y_pos:int, x_rectpos:uint, y_rectpos:uint)
{
super(width, height, x_pos, y_pos, x_rectpos, y_rectpos, new BitmapData(width, height, true, 0x0));
bloblist = new Vector.<BLOB>();
}
public function addObject(obj:BLOB):void
{
bloblist.push(obj);
trace("BLOB added to bloblist");
}
public function update():void
{
for each (var x:BLOB in bloblist)
{
data.copyPixels(x.data, x.rect, x.point, null, null, true);
}
}
public function flush():void
{
data.fillRect(data.rect, 0x0);
}
}
}
Есть еще два класса, но они в значительной степени похожи друг на друга - один класс для слоев без холста (в основном, вектор BLOB) и последний класс, который обновляет экран. Они работают одинаково.
Я знаю, что это немного, и я хотел бы быть более информативным. Это определенно не лучший ответ в мире, но я надеюсь, что мои фрагменты кода могут, по крайней мере, указать вам правильное направление. Дайте мне знать, если у вас есть какие-либо вопросы, и я постараюсь на них ответить.
Удачи.