![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
По моему, если класть на задний фон JPEG, вместо PNG, просто убавляется число альфа-каналов в стопке, и можно рисовать на 1 больше PNG. Сейчас проверю.
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Лично у меня не получилось воспроизвести проблему в чистом проекте.
package com.zackmercury { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.display.Graphics; import flash.geom.Point; import flash.text.TextField; import flash.utils.getTimer; /** * ... * @author ZackMercury */ public class Main extends Sprite { private var balls:Array = []; public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } public function init(e:Event = null):void { if (hasEventListener(Event.ADDED_TO_STAGE)) removeEventListener(Event.ADDED_TO_STAGE, init); //entry var btn:MyButton = new MyButton("Test"); btn.onClick = addBall; addChild(btn); addEventListener(Event.ENTER_FRAME, update); } private function addBall(e:MouseEvent):void { var bmpDt:BitmapData = new BitmapData(100, 100, true, 0x00000000); var ball:Shape = new Shape(); with (ball.graphics) { beginFill(0xCC9911); drawCircle(50, 50, 50); endFill(); beginFill(0xFFAA00); drawCircle(50, 50, 20); endFill(); beginFill(0x222222); drawCircle(50, 50, 5); endFill(); } bmpDt.draw(ball); var bmp:Bitmap = new Bitmap(bmpDt, "auto", false); addChild(bmp); balls.push(bmp); } private function update(e:Event):void { for (var i:int = 0 ; i < balls.length; i ++) { balls[i].y = (1 + Math.sin(getTimer() / 1000 + i / 5)) / 2 * 400; balls[i].x = (1 + Math.cos(getTimer() / 1000 + i / 5)) / 2 * (800 - balls[i].width); } } } } Быть может, нужно непрозрачность понизить? Что я не так делаю?
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Oct 2013
Сообщений: 126
|
В чистом проекте у меня тоже не получилось воспроизвести проблемму((
package { import animation.*; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; /** * ... * @author 7_11 */ public class Main extends Sprite { private const W:uint = 720; private const H:uint = 450; // CONSTRUCTOR public function Main():void { // проверяем наличие stage, если нету - слушаем событие добавления на stage if (stage) { init() } else { addEventListener(Event.ADDED_TO_STAGE, init) }; } // INIT private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // растеризуем клипы rasterize(); } // БИТМАП КЭШИРОВАНИЕ КЛИПОВ private function rasterize():void { // Получаем указатель на кэш анимаций var cache:AntAnimCache = AntAnimCache.getInstance(); // Список изображений для растеризации var rastrList:Array = [Image_mc]; // Добавляем имена клипов которые необходимо растеризировать. // Имя клипа - это его имя класса под которым он экспортируется в код. cache.addClipsToCacheQueue(rastrList); // Добавляем обработчики на прогресс и завершение кэширования. cache.onProgressCallback = onCacheProgress; cache.onCompleteCallback = onCacheComplete; // Запускаем процесс кэширования cache.makeCache(); }; // Отображение процесса кэширования клипов. private function onCacheProgress(percent:Number):void { trace('caching... ' + int(percent * 100) + '%') }; // КЭШИРОВАНИЕ КЛИПОВ ЗАВЕРШЕНО - СОЗДАЁМ МИР private function onCacheComplete():void { // добавляем фоновую картинку var back:Shape = new Shape(); back.graphics.beginFill(0xFFFFFF); back.graphics.drawRect(0, 0, W, H); back.graphics.endFill(); addChild(back); // создаём 230 тестовых картинок for (var j:int = 0; j < 230; j++) { var img:AntActor = new AntActor(); img.addAnimFromCache('Image_mc'); img.play(); addChild(img); img.x = W * .5; img.y = H * .5; }; }; } } Последний раз редактировалось dimarik; 01.04.2015 в 21:10. Причина: [FLASH=31502;100%;100%;#FFFFFF;]Test.swf[/FLASH] |
|
|||||
|
Регистрация: Oct 2013
Сообщений: 126
|
Забавная подробность: если картинки расположить не в одной точке, а через цикл со смещением в 1 пиксель, то чёрный прямоугольник появляется не по размерам кадра у первой картинки, а только по размерам области пересечения картинок...
|
|
|||||
|
Кстати, в последних статьях Антон говорил, что полностью перешёл на ручной(буфферизированный) рендер.
Может, не просто так это?
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Oct 2013
Сообщений: 126
|
Неверняка не просто так) Но для меня пока что словосочетания типа "буфферизированный рендер" звучат как какие-то заклинания. Пока что подложка jpg помогла, а дальше буду разбираться. Спасибо всем!
|
|
|||||
|
На самом деле ничего сложного в этом слове нет.
Это просто рисование всех и вся не в дисплейлист, а в 1 битмапу(растровый буффер) с обновлениями не целой битмапы, а кусками, там где она меняется. Хотя так или иначе Flash каждый кадр перерисовывает битмапу заново на экране.
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 01.04.2015 в 13:15. |
|
|||||
|
Регистрация: Oct 2013
Сообщений: 126
|
спасибо за пояснение
|
![]() |
![]() |
Часовой пояс GMT +4, время: 22:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|