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

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

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

Регистрация: Feb 2010
Сообщений: 95
По умолчанию Падение фпс от безобидного кода

Один раз я уже создавал тему, где писал, как после добавления импорта класса или чего-то в этом роде фпс ужасно падал. Сейчас ситуация похожая.

Пишу игры на своем "движке" с использованием бокс2д. Иерархия такая: GameObject <- DynamicGameObject <- SomeSpecialObject. У них есть атрибуты физического тела и изображения:
Код AS3:
public var sprite:MovieClip;
public var body:b2Body;
В box2d есть функция SetUserData для физического тела (b2Body), которую я использую для проверки столкновений. Вот код этой функции:

Код AS3:
private var m_userData:*;
......................
public function SetUserData(data:*) : void
	{
		m_userData = data;
	}
Обычно я делаю так:
Код AS3:
//конструктор SomeSpecialObject
public function SomeSpecialObject()
{
    body = ...;
    sprite = ...;
    body.SetUserData(this);  //!!!!!!!!!!!!!!!
    super(....);
}
Т.е, создаю тело в конструкторе и делаю body.SetUserData(this);

Сейчас понадобилось создавать тело в другом классе, и передавать его в конструктор. Примерно так:
Код AS3:
public function SomeSpecialObject(b:b2Body)
{
    body = b;
    sprite = ...;
    body.SetUserData(this);
    super(....);
}
Результат - фпс 5-8 при ожидаемых 25! Комментирую body.SetUserData(this); - фпс нормальный. Неужели как тут - http://www.flasher.ru/forum/showthread.php?t=143387 - все из-за фаз луны?

Пробовал по-другому, убрав body.SetUserData(this) из конструктора, но все равно тоже самое:
Код AS3:
var body:b2Body = ....;
var object:SomeSpecialObject = new SomeSpecialObject(body);
object.body.SetUserData(object);
Как такая безобидная ф-я, как SetUserData, может оказать такое влияние?
Надеюсь, написал не слишком сумбурно.

ап: Когда пишу body.SetUserData("text"); - проблем нету
ап: Передалал, чтобы тело создавалось в конструкторе - все равно с фпс завал. Так что или дело в боксе (не могу понять, как это возможно), или баг.

файнал ап: все, исправил. Это чем-то похоже на то, что было сказано в моей предыдущей теме: http://www.flasher.ru/forum/showpost...90&postcount=8
Работаю на классом веревки - каждый ее сегмент есть игровым обьектом. До исправления был главный игровый массив с игровыми обьектами, и каждый кадр делался проход в цикле по массиву - обьекты обновлялись. Но звенья цепи были не в основном массиве, а в массиве обьекта-веревки. Таким образом, при обновлении веревки в основном цикле запускалось прохождение по обьектам звеньев в цикле веревки. Перенес "звенья" в главный игровой массив (т.е., все обьекты обновляются в одном цикле) - все заработало. Почему - не знаю


Последний раз редактировалось vinch; 18.09.2010 в 00:04.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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