Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.04.2013, 16:19
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 21  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от Psy Посмотреть сообщение
Спасибо большое за разъяснения.
У меня следующий вопрос есть.. Когда я компилирую AIR-проект в самом флеше, все нормально. Но когда запускаю саму swf-ку, возникает ошибка VerifyError: Error #1014: Не удалось найти класс flash.filesystem::File.
AIR-проектом не предусмотрено открывание отдельно от AIR swf файлов. AIR это как отдельный плеер, который надо сначала инсталировать, потом инсталировать ваш аир проект и только потом запускать ваш проект.
Цитата:
Сообщение от Psy Посмотреть сообщение
Можете подсказать, как обойти эту проблему?
Это не проблема это особенность архитектуры AIR.
Цитата:
Сообщение от Psy Посмотреть сообщение
Добавлено через 50 минут
И еще один вопрос.. Вот из основного редактора я сохраняю данные в XML-файл.
В программе-проигрывателе я встраиваю этот файл, и считываю данные, воспроизвожу ролик. Но обновляется это файлик с проигрывателем, естественно, только после перезапуска в самом флеше. А как можно сделать так, чтобы он брал данные из нового xml ?
Что-бы он брал данные из нового xml, надо эти xml данные загрузить, это можно сделать использовав Loader.
__________________
Гоночка

Старый 06.04.2013, 16:26
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 22  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Цитата:
Что-бы он брал данные из нового xml, надо эти xml данные загрузить, это можно сделать использовав Loader
Думаю вы имели ввиду URLLoader для случая с хмл
__________________
...

Старый 06.04.2013, 16:35
Psy вне форума Посмотреть профиль Отправить личное сообщение для Psy Найти все сообщения от Psy
  № 23  
Ответить с цитированием
Psy

Регистрация: 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.
Старый 06.04.2013, 19:24
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 24  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
И довольно сильно тормозит воспроизведение. Можете подсказать, что я делаю не так? Параметры таймера ставлю одинаковые и там и там.
Воспроизведение тормозит, наверно потому что сильно много образуется векторных линий в mySprite.graphics, надо кешировать graphics в битмапдату например как-то так
Код AS3:
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);
 
		}
 
	}
 
}
Так сколько бы линий не было тормозов не будет, потому что graphics спрайта чистый.
__________________
Гоночка

Старый 07.04.2013, 14:02
Psy вне форума Посмотреть профиль Отправить личное сообщение для Psy Найти все сообщения от Psy
  № 25  
Ответить с цитированием
Psy

Регистрация: Mar 2013
Сообщений: 14
Сделал так, как вы написали, но память все еще забивается. Чем дальше воспроизводится ролик, тем больше памяти съедается. Не могу понять, где именно.
Делал по вашему примеру:

Код AS3:
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++;
}
Не подскажете, в чем еще проблема?

Старый 07.04.2013, 16:02
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 26  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от Psy Посмотреть сообщение
Сделал так, как вы написали, но память все еще забивается. Чем дальше воспроизводится ролик, тем больше памяти съедается. Не могу понять, где именно.
Попробуйте монстер дебагером найти утечку
http://redefy.net/2012/04/30/monsterdebugger3-02/
__________________
Гоночка

Старый 29.04.2013, 04:06
Psy вне форума Посмотреть профиль Отправить личное сообщение для Psy Найти все сообщения от Psy
  № 27  
Ответить с цитированием
Psy

Регистрация: Mar 2013
Сообщений: 14
Прошу прощения, что поднимаю старую тему. Уезжал - и не было возможности тогда разбираться.
Проблема видимо в том, что образуется слишком много объектов Child, в этой строчке:
addChild(bm = new Bitmap(bmd = new BitmapData(800, 600,true,0x00000000)));

Можно ли как-то сделать, чтобы на каждом тике изображение, которое показывается в данный момент, переводилось в один объект, а остальные удалялись из родительского контейнера, или какой-то другой способ..

Подскажите пожалуйста, как решить данную проблему.

Старый 29.04.2013, 11:32
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 28  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от Psy Посмотреть сообщение
Прошу прощения, что поднимаю старую тему. Уезжал - и не было возможности тогда разбираться.
Проблема видимо в том, что образуется слишком много объектов Child, в этой строчке:
addChild(bm = new Bitmap(bmd = new BitmapData(800, 600,true,0x00000000)));

Можно ли как-то сделать, чтобы на каждом тике изображение, которое показывается в данный момент, переводилось в один объект, а остальные удалялись из родительского контейнера, или какой-то другой способ..

Подскажите пожалуйста, как решить данную проблему.
использовать вместо addChild(bm = new Bitmap(bmd = new BitmapData(800, 600,true,0x00000000)));
Код AS3:
			bmd.copyPixels(b, new Rectangle(0, 0, spRect.width, spRect.height), new Point(spRect.x, spRect.y), null, null, true);
В предыдущем посте how-to
__________________
Гоночка

Старый 14.05.2013, 23:24
Psy вне форума Посмотреть профиль Отправить личное сообщение для Psy Найти все сообщения от Psy
  № 29  
Ответить с цитированием
Psy

Регистрация: Mar 2013
Сообщений: 14
Цитата:
Сообщение от Alex Lexcuk Посмотреть сообщение
использовать вместо addChild(bm = new Bitmap(bmd = new BitmapData(800, 600,true,0x00000000)));
Код AS3:
			bmd.copyPixels(b, new Rectangle(0, 0, spRect.width, spRect.height), new Point(spRect.x, spRect.y), null, null, true);
В предыдущем посте how-to
Спасибо Вам огромное за помощь. Благодаря вашим подсказкам хоть что-то, но получилось. Добавил в функцию onTick строчку while (numChildren>80) removeChildAt(0); и память перегружатся перестала.

Что именно вы имели в этом посту в виду, так и не понял. В основном коде использую
var bitmap:Bitmap=new Bitmap(bmd);
addChild(bitmap);
Получается, что образуется много чайлдов, которых потом и чищу.. А как сделать без этого, так и не разобрался( Но сейчас уже хоть как-то работает

Старый 15.05.2013, 12:18
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 30  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Получается, что образуется много чайлдов, которых потом и чищу.. А как сделать без этого, так и не разобрался( Но сейчас уже хоть как-то работает
Не знаю как объяснить, можете скомпилировать этот приме с бесконечным числом кругов как документ класс
Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:03.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.