ver una trabajar quitar que mascara desocultar con como capa canales canal alfa actionscript-3 bitmap sprite depth

actionscript 3 - una - AS3: exactamente en 23 canales alfa vacíos, las imágenes siguientes dejan de dibujar



quitar canal alfa photoshop (3)

Además de dibujar en un único BitmapData, un método adicional para intentar puede ser colocar tus Bitmaps en un único Sprite. Establezca cacheAsBitmap=true para su contenedor de Sprite.

Me di cuenta, al tratar de dibujar un gran número de círculos, que ocasionalmente, habría algún tipo de error visual en el que algunos círculos no dibujarían correctamente. Bueno, lo reduje y noté que si hay 23 o más objetos con 00 para un valor alfa en el mismo lugar, entonces los objetos a continuación no dibujan. Parece ser píxel por píxel, ya que partes de la imagen aún dibujan.

Originalmente, este problema se notó con una clase que heredó Sprite. Se confirmó que también era un problema con Sprites, y ahora con Bitmaps también. Si alguien puede encontrar una clase de nivel inferior a Bitmap que no tiene este problema, por favor hable para que podamos tratar de encontrar el origen del problema.

Preparé una pequeña clase de prueba que demuestra lo que quiero decir. Puede cambiar el valor entero en la línea 20 para ver las tres pruebas que surgieron para mostrar claramente el problema.

¿Hay algún tipo de solución, o es solo un límite con el que tengo que trabajar? Alguien ha experimentado esto antes? ¿Es posible que esté haciendo algo mal, a pesar de la implementación escueta?

package { import flash.display.Sprite; import flash.events.Event; import flash.display.Bitmap; import flash.display.BitmapData; public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point Test(3); } private function Test(testInt:int):void { if(testInt==1){ addChild(new Bitmap(new BitmapData(200, 200, true, 0xFFFF0000))); for (var i:int = 0; i < 22; i++) { addChild(new Bitmap(new BitmapData(100, 100, true, 0x00000000))); } } if(testInt==2){ addChild(new Bitmap(new BitmapData(200, 200, true, 0xFFFF0000))); for (var j:int = 0; j < 23; j++) { addChild(new Bitmap(new BitmapData(100, 100, true, 0x00000000))); } } if(testInt==3){ addChild(new Bitmap(new BitmapData(200, 200, true, 0xFFFF0000))); for (var k:int = 0; k < 22; k++) { addChild(new Bitmap(new BitmapData(100, 100, true, 0x00000000))); } var M:Bitmap = new Bitmap(new BitmapData(100, 100, true, 0x00000000)); M.x += 50; M.y += 50; addChild(M); } } } }


No estoy seguro de por qué añades Bitmap como niños. Creo que deberías dibujar todas las "formas" en un solo BitmapData, usando draw (). Simplemente puede dibujar formas y luego dibujarlas en BitmapData. Puedo ser más específico si necesitas más explicación.


establecer bmp.cacheAsBitmap = ture para cada Bitmap