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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.01.2009, 23:55
Nel вне форума Посмотреть профиль Отправить личное сообщение для Nel Найти все сообщения от Nel
  № 1  
Ответить с цитированием
Nel

Регистрация: May 2008
Сообщений: 27
По умолчанию Тормозит движение юнита + видно обновление всей флешки

собственно делал делал игрушку все путем

ландшафт рисуется домики строиться
решил заняться техникой поставил танк прописал минимальное движение и обнаружил что анимация дергается при движение создается такое чувство что проскакивает кадр если очень быстро двигать поспрашивал сказали не пользуйся Unit.GotoAndStop(mFrame); типа раздели на кадры, Сказано сделано разделил тодже болт! начал грешить на то что где-то слишком часто обновляю экран и т.д. дошел до пустой флешки с минимальным кодом с приращением к unit.x += 4 при обновление 25 кадров в секунду все равно тормозит

Флешем занялся не давно мб что прописывать надо настраивать или еще что я уже все перепробовал в чем может быть проблема
картинки png размер 44Х44

код пишу в flashDevelop компиляция в Flash CS3

код:
Код AS3:
public class Main extends Sprite
	{
		/// массив слоев
		private var mvLayer:Array;
 
		private var mTimer:Timer;
 
		public var mUnit:MovieClip;
 
 
		public function Main()
		{
			mvLayer = [];
 
			mTimer = new Timer(40);
			mTimer.addEventListener(TimerEvent.TIMER, UpdateTime);
			mTimer.start();
 
			//stage.addEventListener(Event.ENTER_FRAME, Update);
 
			onLoadComplete();
		}
 
		public function onLoadComplete():void 
		{
			for (var i:uint = 0; i < 1; i++ )
			{
 
				mUnit = new Tank_2_1();
				mUnit.y = 30*i;
				addChild(mUnit);
 
				mvLayer.push(mUnit);
			}
 
 
		}
 
		public function UpdateTime(e:TimerEvent)
		{
			for(var i:Number = 0; i < mvLayer.length; i++)
			{
				(mvLayer[i] as MovieClip).x += 4;
			}
		}
 
		/// функция апдейта
		public function Update(e:Event):void
		{
			for(var i:Number = 0; i < mvLayer.length; i++)
			{
				(mvLayer[i] as MovieClip).x += 3;
			}
		}
	}
сам код + проект + фла файл дать могу без проблем )


Последний раз редактировалось Nel; 15.01.2009 в 02:52.
Старый 15.01.2009, 02:17
Nel вне форума Посмотреть профиль Отправить личное сообщение для Nel Найти все сообщения от Nel
  № 2  
Ответить с цитированием
Nel

Регистрация: May 2008
Сообщений: 27
скорость 25 фпс а также файл проекта с картинкой и собствено кодом
tank.rar

Старый 15.01.2009, 09:08
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 3  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Я бы посоветовал не пользоваться таймером, все таки лучше enterFrame. Помимо этого в качестве оптимизации можно сохранить длину вашего списка отображения в private переменную и ее использовать для условия в циклах. Еще можно при обращении к массиву использовать вместо записи
Код AS3:
(mvLayer[i] as MovieClip).x += 3;
вот так
Код AS3:
mvLayer[i].x += 3;
Вы ведь не используете методы, а только определяете свойство.
Причем можно сделать хоть на 100 танков ваш тестовый onLoadComplete от этого скорость движения не меняется.
Ну и я бы все таки менял координаты танка внутри класса танка а не из родительского объекта), это вроде разумнее что объект сам собой управляет.
А то что дергано, так кадры показываются не 25 в секунду, а вроде как плеер обновление делает по необходимости. Поставьте частоту 100, а шаг 1 и будет плавно ездить) Дергано потому что объекты смещаются рывками.

Добавлено через 13 минут
Вот сравни оба варианта) На экране двигается реально 100 штук. Большой разницы между таймером и кадром нету, но кадр на мой взгляд и проще и предпочтительней.
Только для флэшки поставь 100 кадров FPS для чистоты эксперимента)

Код AS3:
package {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	import flash.net.*;
	import flash.display.*;
	import flash.utils.*;
 
	public class Main extends Sprite
	{
		private var mvLayer:Array;
		private var lengthMV:uint; // Длина списка отображения
 
		private var mTimer:Timer;
 
		public var mUnit:MovieClip;
 
 
		public function Main()
		{
			mvLayer = [];
 
			onLoadComplete();
		}
 
		public function onLoadComplete():void 
		{
			for (var i:uint = 0; i < 100; i++ )
			{
 
				mUnit = new Tank_2_1();
				mUnit.y = 5*i;
				addChild(mUnit);
 
				mvLayer.push(mUnit);
			}
			lengthMV = mvLayer.length;
			addEventListener(Event.ENTER_FRAME, Update); //Закоментить для проверки с таймером
			// Снять коментарий для проверки с таймером
			/*mTimer = new Timer(10); 
			mTimer.addEventListener(TimerEvent.TIMER, UpdateTime);
			mTimer.start();*/
 
		}
 
		public function UpdateTime(e:TimerEvent)
		{
			for(var i:Number = 0; i < lengthMV; i++)
			{
				(mvLayer[i] as MovieClip).x += 2;
			}
		}
 
		public function Update(e:Event):void
		{
			for(var i:Number = 0; i < lengthMV; i++)
			{
				mvLayer[i].x += 2;
			}
		}
	}
}
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ


Последний раз редактировалось SunShadow; 15.01.2009 в 09:38.
Старый 15.01.2009, 13:33
Nel вне форума Посмотреть профиль Отправить личное сообщение для Nel Найти все сообщения от Nel
  № 4  
Ответить с цитированием
Nel

Регистрация: May 2008
Сообщений: 27
эм мб я не правельно выразился не плавность анимации глючит!
То что там mvLayer и привидение к муви клипу раньше был класс Layer и т.д. просто быстро делал минимальную флешку и не замарочился на етом суть не в етом

100 фпс выставлять не вариант процесор грузиться на много больше чем выставить 21-25-31 фпс и зачем выставлять фпс больше скажем 31 если все равно большинство анимаций делаеться с расщетом на 12 фпс.

Насщет вопроса, танки если присмотреться и запустить скажем не со скоростью 3 а 10 то они тормазят, проскакивают позицию я когда замерял фпс то в етот момент фпс флешки падает в 2-4 раза, через трейс танк катился нормально и то что фпс падает и дает эфект проскакивания кадра, моргания, мерцания и т.д. вчера повысил фпс до 31 отключил таймер запустил все ок понизил фпс обратно до 25 тоже ок, Хотя я давал тогда тестировать многим людям и эфект видили все, короче хз Уличная магия какаято!

P.S. эфект видин был и при 1 танки и при 400 танках Один и тодже!

Добавлено через 2 часа 38 минут
Хотелось бы конечно более весомой помощи кроме как поменять фпс на 100
Эфект не может иметь магические свойства и наверное с етим сталвиваюсь не 1 но решения кроме как поднять фпс мало кто мог предложить


Последний раз редактировалось Nel; 15.01.2009 в 16:19.
Старый 27.03.2011, 06:48
Ariel вне форума Посмотреть профиль Отправить личное сообщение для Ariel Найти все сообщения от Ariel
  № 5  
Ответить с цитированием
Ariel
 
Аватар для Ariel

Регистрация: Dec 2006
Сообщений: 230
Ну что, кто как решает проблему? У меня щас такое же дергание как и в этом tank.rar
Как забарывать? Уже все перепробовал! И дробные координаты, и updateAfterEvent, и разные фреймрейты. Ничего не помогает! Везде нет плавности, всегда поддергивает...

Старый 27.03.2011, 06:59
Random1984 вне форума Посмотреть профиль Отправить личное сообщение для Random1984 Найти все сообщения от Random1984
  № 6  
Ответить с цитированием
Random1984

Регистрация: Mar 2009
Адрес: (0,0,0)
Сообщений: 7
у меня частенько бывают похожие глюки, личится перезапуском flashDevelop'a

Старый 27.03.2011, 17:00
Ariel вне форума Посмотреть профиль Отправить личное сообщение для Ariel Найти все сообщения от Ariel
  № 7  
Ответить с цитированием
Ariel
 
Аватар для Ariel

Регистрация: Dec 2006
Сообщений: 230
Причем здесь flashDevelop?
Это работа плеера.

Старый 27.03.2011, 17:59
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 8  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
честно гря попробовал обычные способы какие раньше работали типа:
Код AS3:
		public function initUnits():void 
		{
			for (var i:uint = 0; i < 3; i++ )
			{
				_units[i] = new Bitmap(new View_Tank(0, 0), "auto", true);
				_units[i].scaleX = _units[i].scaleY = 1.111;
				_units[i].cacheAsBitmap = true;
				_units[i].y = 45 * i;
				_units[i].filters = [new BlurFilter(2, 2, 3)];
				addChild(_units[i]);
			}
		}
и всеравно видно что анимация идет не плавно, можете еще http://habrahabr.ru/blogs/javascript/67179/ это попробвать, если не сложно отпишитесь как оно пройдет.

Старый 27.03.2011, 18:12
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
прикрепите пожалуйста кто-нибудь SWF. Очень уж захотелось посмотреть, у кого что там дергается

Старый 27.03.2011, 18:15
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 10  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
i.o., помните тему с векторным поездом, вернее с сайтом, где этот поезд бешено ехал слева направо? Там были такие подергивания анимации. Может быть это имеется в виду? Я еще там высказал предположение, которое сейчас мне кажется глупым (:

Добавлено через 33 секунды
http://www.flasher.ru/forum/showthre...E2%E0%ED%E8%FF
вот она
__________________
тут я

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:28.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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