Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно рисовать быстро 
:(
    Опции темы
Leksey
Дата 7.9.2007, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



 происходит ли обновление изображения при изменении позиции спрайта? 
например мы поменяли x координату, изменения моментально отображаються?
А что тогда если у нас куча этих объектов спрайт и они все двигаються?
А может было неправильно их рисовать как отдельные спрайты, а нужно было просто у одного спрайты с помощью graphics все вручную делать?

собственно ответов на эти вопросы что-то не могу найти в интернете и в книжках.
Есть флешка с несколькими многоугольниками - их можно выбирать и перемещать и вращать. так вот после непродолжительного вращения/перемещения флешка все больше "тупит". с чем это может быть связано?
PM MAIL   Вверх
AlDev
Дата 7.9.2007, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 10
Всего: 50



Цитата(Leksey @  7.9.2007,  06:56 Найти цитируемый пост)
 происходит ли обновление изображения при изменении позиции спрайта? 

Это быстрее, чем перерисовать спрайт.


Цитата(Leksey @  7.9.2007,  06:56 Найти цитируемый пост)
например мы поменяли x координату, изменения моментально отображаються?

Если нет фильтров, то все достаточно быстро.


Цитата(Leksey @  7.9.2007,  06:56 Найти цитируемый пост)
А что тогда если у нас куча этих объектов спрайт и они все двигаються?

Тут лучше распределять. Иначе память перегрузится. Двигать только контейнеры, или двигать по несколько за шаг с использованием интервалов.


Цитата(Leksey @  7.9.2007,  06:56 Найти цитируемый пост)
А может было неправильно их рисовать как отдельные спрайты, а нужно было просто у одного спрайты с помощью graphics все вручную делать?

Каждый спрайт создает вместе с собой кучу всякого говна, как правило не нужного.
Если ты только рисуешь, а не добавляешь к спрайту чайлды, то лучше использовать не Sprite, а Shape. 

Разделение на спрайты это архитектурный вопрос - естественно что если у тебя мало объектов - все быстрее и память не засирается лишним. Но разобраться и модифицировать - сложнее.

Цитата(Leksey @  7.9.2007,  06:56 Найти цитируемый пост)
Есть флешка с несколькими многоугольниками - их можно выбирать и перемещать и вращать. так вот после непродолжительного вращения/перемещения флешка все больше "тупит". с чем это может быть связано? 

Скорее всего:
#1: Интервалы
#2: Где-то создаются объекты лишние
или просто все время создаются объекты.

У меня так и не получилось заметить Garbage Collector в действии. Так что советую быть очень внимательным с созданием объектов.
PM MAIL WWW ICQ YIM MSN   Вверх
Leksey
Дата 7.9.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



Спасибо большое за подробный ответ, но все таки некоторые моменты не совсем понятны.
То что передвинуть  быстрее чем перерисовать особенно если casheAsBitmap стоит это мне понятно. 
Но я передвигаю сразу несколько объектов, и мне хотелось бы чтобы перерисовка произошла один раз после всех изменений позиций, а не при кажом перемещении одного объекта. Можно ли как нибудь запретить обновление, пока я не закончил изменение позиций всех объектов?

 Sprite насколько я понял отличаеться от Shape только наличием коллекции - заменил на Shape результаты теже.

А еще можно поподробнее про интервалы?  - я новичек во Флеше и поэтому стока вопросов задаю...

Насчет постоянно создающихся объектов. 
Вот например метод класса Vector:
Код

    public static function Subtract(u:Vector, v:Vector):Vector
        {
            var r:Vector = new Vector(u.x, u.y);
            r.Subtract(v);
            return r;    
        }

Как видно здесь сздаеться новый объект - вектор. Поскольку этот метод вызываеться достаточно большое количество раз за перерисовку/пересчет столкновений - это может быть причиной замедления работы? И этот код нужно как то переделать? ( Как же не хватает Value типов и передачи аргументов по ссылке...)    
PM MAIL   Вверх
AlDev
Дата 10.9.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 10
Всего: 50



Аргументы (кроме базовых типов: Number, uint, int, String, Boolean) всегда передаются по ссылке.
Для базовых типов можно сделать обертки. Аля
Код

class NumberWrapper {
  public var value:Number;
  public function NumberWrapper(value:Number) {
    this.value = value;
  }
}


Цитата(Leksey @  7.9.2007,  18:23 Найти цитируемый пост)
Можно ли как нибудь запретить обновление, пока я не закончил изменение позиций всех объектов?

afaik нет.

Можно распределить вычисления - считать все блоками. При просчете блока - считать следующий блок.

Интервалы - постоянный вызов чего-либо через определенный промежуток времени.
PM MAIL WWW ICQ YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0430 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.