Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Падение фпс от безобидного кода (http://www.flasher.ru/forum/showthread.php?t=144673)

vinch 17.09.2010 22:54

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

Пишу игры на своем "движке" с использованием бокс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
Работаю на классом веревки - каждый ее сегмент есть игровым обьектом. До исправления был главный игровый массив с игровыми обьектами, и каждый кадр делался проход в цикле по массиву - обьекты обновлялись. Но звенья цепи были не в основном массиве, а в массиве обьекта-веревки. Таким образом, при обновлении веревки в основном цикле запускалось прохождение по обьектам звеньев в цикле веревки. Перенес "звенья" в главный игровой массив (т.е., все обьекты обновляются в одном цикле) - все заработало. Почему - не знаю :)


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

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