![]() |
|
||||||||||
|
|||||
|
Цитата:
Это не проблема это особенность архитектуры AIR. Цитата:
__________________
Гоночка |
|
|||||
|
Цитата:
__________________
... |
|
|||||
|
Регистрация: Mar 2013
Сообщений: 14
|
Спасибо большое. С 1м и сам разобрался. Помогла перезагрузка компьютера
air файл у меня был, не знаю, в чем проблема была. А через встраивание XML не получится никак? Мне бы желательно, чтобы был один swf-файл. Или вы имеете в виду сначала загрузить через лоадер, а потом встроить? Добавлено через 2 часа 18 минут И еще один вопрос.. В основном плеере я для проверки сделал функцию воспроизведения ролика. Т.е. что-то рисуешь, оно сразу в массив спрайтов сохраняется, которые потом по таймеру воспроизводятся. Такое воспроизведение работает нормально. В программе-плеере делаю так: function onTick(e:TimerEvent):void //Действия по тику таймера { mySprite.graphics.lineStyle(BrSizeArray[i],ColorArray[i],1); mySprite.graphics.moveTo(X1[i], Y1[i]); mySprite.graphics.lineTo(X2[i], Y2[i]); delete X1[i]; delete X2[i]; delete Y1[i]; delete Y2[i]; i++; addChild(mySprite); } И довольно сильно тормозит воспроизведение. Можете подсказать, что я делаю не так? Параметры таймера ставлю одинаковые и там и там. Последний раз редактировалось Psy; 06.04.2013 в 18:45. |
|
|||||
|
Цитата:
package { import flash.display.*; import flash.events.*; import flash.geom.*; import flash.utils.*; /** * ... * @author Lexcuk */ public class BitiDoc extends Sprite { public var mySprite:Sprite; public var bmd:BitmapData; public var bm:Bitmap; public var lastMousePos:Point; public function BitiDoc() { addChild(mySprite = new Sprite()); addChild(bm = new Bitmap(bmd = new BitmapData(800, 600,true,0x00000000))); var timer:Timer = new Timer(1); lastMousePos = new Point(); timer.start(); timer.addEventListener(TimerEvent.TIMER, timerHandler); } public function timerHandler(e:TimerEvent):void { mySprite.graphics.clear(); mySprite.graphics.lineStyle(3, 0); mySprite.graphics.moveTo(lastMousePos.x, lastMousePos.y); mySprite.graphics.lineTo(lastMousePos.x = stage.mouseX, lastMousePos.y = stage.mouseY); var spRect:Rectangle = mySprite.getBounds(mySprite); var mat:Matrix = new Matrix(); mat.translate( -spRect.x, -spRect.y); if (spRect.width > 200) spRect.width = 200; if (spRect.height > 200) spRect.height = 200; var b:BitmapData = new BitmapData(spRect.width, spRect.height,true,0x00000000); b.draw(mySprite, mat, null, null, null, true); bmd.copyPixels(b, new Rectangle(0, 0, spRect.width, spRect.height), new Point(spRect.x, spRect.y), null, null, true); } } }
__________________
Гоночка |
|
|||||
|
Регистрация: Mar 2013
Сообщений: 14
|
Сделал так, как вы написали, но память все еще забивается. Чем дальше воспроизводится ролик, тем больше памяти съедается. Не могу понять, где именно.
Делал по вашему примеру: function onTick(e:TimerEvent):void //Действия по тику таймера { mySprite.graphics.clear(); mySprite.graphics.lineStyle(BrSizeArray[i],ColorArray[i],1); mySprite.graphics.moveTo(X1[i], Y1[i]); mySprite.graphics.lineTo(X2[i], Y2[i]); var Rect:Rectangle = mySprite.getBounds(mySprite); var mat:Matrix = new Matrix(); mat.translate( -Rect.x, -Rect.y); b = new BitmapData(Rect.width, Rect.height,true,0x00000000); b.draw(mySprite, mat, null, null, null, true); bmd.copyPixels(b, new Rectangle(0, 0, Rect.width, Rect.height), new Point(Rect.x, Rect.y), null, null, true); b.dispose(); b=null; delete X1[i]; delete X2[i]; delete Y1[i]; delete Y2[i]; i++; } |
|
|||||
|
Цитата:
http://redefy.net/2012/04/30/monsterdebugger3-02/
__________________
Гоночка |
|
|||||
|
Регистрация: Mar 2013
Сообщений: 14
|
Прошу прощения, что поднимаю старую тему. Уезжал - и не было возможности тогда разбираться.
Проблема видимо в том, что образуется слишком много объектов Child, в этой строчке: addChild(bm = new Bitmap(bmd = new BitmapData(800, 600,true,0x00000000))); Можно ли как-то сделать, чтобы на каждом тике изображение, которое показывается в данный момент, переводилось в один объект, а остальные удалялись из родительского контейнера, или какой-то другой способ.. Подскажите пожалуйста, как решить данную проблему. |
|
|||||
|
Цитата:
В предыдущем посте how-to
__________________
Гоночка |
|
|||||
|
Регистрация: Mar 2013
Сообщений: 14
|
Цитата:
Что именно вы имели в этом посту в виду, так и не понял. В основном коде использую var bitmap:Bitmap=new Bitmap(bmd); addChild(bitmap); Получается, что образуется много чайлдов, которых потом и чищу.. А как сделать без этого, так и не разобрался( Но сейчас уже хоть как-то работает |
|
|||||
|
Цитата:
package { import flash.display.*; import flash.events.*; /** * ... * @author Lexcuk */ public class ManyManyCirclesChild extends Sprite { private var bmd:BitmapData; public function ManyManyCirclesChild() { //создаём прозрачную битмап дату bmd = new BitmapData(800, 600, true, 0x00000000); addChild(new Bitmap(bmd)); addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(e:Event):void { //делаем кружек, но не добавляем его на сцену, а фотографируем в битмап var sp:Sprite = new Sprite(); sp.graphics.lineStyle(10, Math.random()*0xFFFFFF); sp.graphics.drawCircle(Math.random() * 800, Math.random() * 600, 50 + Math.random() * 300); bmd.draw(sp); } } }
__________________
Гоночка |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:03. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|