Форум 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=211836)

WaldeMar1321 17.11.2015 23:06

Нужна помощь с отображением мукивкипов
 
Здравствуйте, решил обратиться к умным людям прежде чем лезть в дебри.
Короче, я хочу отобразить один кадр из MovieClip'а некоторое количество раз на экране. В цикле. Не создавая массив из этих MovieClip'ов. Можно ли использовать как-то преобразование из MovieClip'а в BitmapData прямо в цикле? метод addChild отображает только один раз (конечный).

Есть идеи?

Спасибо.

ZackMercury 17.11.2015 23:09

Вы можете сделать скриншот мувика с помощью BitmapData.draw(...), затем в цикле ввести массив битмапов, каждому из которых присвоить экземпляр BitmapData, в который вы нарисовали кадр мувика, и в итоге иметь N битмап, ссылающихся на одну битмапдату.

WaldeMar1321 17.11.2015 23:29

Спасибо, получилось. походу это придется поставить на ENTER_FRAME чтоб подобным образом перерисовывалось постоянно, если камеру двигать. Сомнительный вариант.

ZackMercury 17.11.2015 23:51

Зачем перерисовывать? И о какой камере идёт речь, речь ведь шла о DisplayList?
BitmapData.draw(...), вероятно, замедлит работу вашей программы, чем обычный мувиклип, если использовать первый каждый кадр.

caseyryan 18.11.2015 10:19

draw довольно быстрый метод

WaldeMar1321 18.11.2015 10:39

Вот черновой пример кода:
Код AS3:

var Blit:BitmapData = new BitmapData(floor.width, floor.height);
//..........
for (var Y:int = 0; Y < 480; Y += 50)
    for (var X:int = 0; X < 640; X += 50)
        {
            var B:Bitmap = new Bitmap(Blit);
                B.x = X;
                B.y = Y
                this.addChild(B);
        }

Камеру я имел ввиду "условную". А вот про DisplayList мне интересно.

ZackMercury 18.11.2015 18:41

Цитата:

draw довольно быстрый метод
Нет .

Добавлено через 4 минуты
Цитата:

for (var Y:int = 0; Y < 480; Y += 50)
for (var X:int = 0; X < 640; X += 50)
{
var B:Bitmap = new Bitmap(Blit);
B.x = X;
B.y = Y
this.addChild(B);
}
Вы хотите каждый кадр создавать кучу битмап? Зачем?
Объявите двумерный массив, и двигайте его элементы.

WaldeMar1321 18.11.2015 19:30

этот кусок кода находится в классе экземпляр которого вызывается из Main. На сцену экземпляр этого класса добавляется уже после вышеупомянутого куска кода. Мне просто не хочется заводить лишний двухмерных массив чтоб отобразить простой пол. Я пытаюсь, взять маленькое 50х50 пикселей, или меньше изображение, и копировать его нужное количество раз на "экран". а потом уже вызвать stage.addChild() и пользоваться им как одним изображением. В случае выхода за границу экрана удалить не нужные removeChilAt линии и столбцы, и "дорисовать" нужные. в цикле, внутри вышеупомянутого класса. Но это не окончательное решение...

caseyryan 18.11.2015 19:46

Цитата:

Сообщение от ZackMercury (Сообщение 1189103)
Нет .

А я тебе говорю, что да. Уже сто раз эта тема обсуждалась. Кучи тестов проводили. Если у тебя уже есть готовая битмапдата, то draw() очень шустро может в нее что-то врисовывать. Я в свое время делал систему видеонаблюдения на AIR, которая с нескольких камер потоки с помощью draw() рисовала в битмапки и определяла движение с помощью бленд модов. Это не тормозило даже на слабом компе.

Bletraut 18.11.2015 21:59

Цитата:

Сообщение от WaldeMar1321 (Сообщение 1189106)
этот кусок кода находится в классе экземпляр которого вызывается из Main. На сцену экземпляр этого класса добавляется уже после вышеупомянутого куска кода. Мне просто не хочется заводить лишний двухмерных массив чтоб отобразить простой пол. Я пытаюсь, взять маленькое 50х50 пикселей, или меньше изображение, и копировать его нужное количество раз на "экран". а потом уже вызвать stage.addChild() и пользоваться им как одним изображением. В случае выхода за границу экрана удалить не нужные removeChilAt линии и столбцы, и "дорисовать" нужные. в цикле, внутри вышеупомянутого класса. Но это не окончательное решение...

Если честно, то это извращение. Куча битмап не даст тебе прироста производительности. Лучше сделать так:
1) Рисуем мувик в битмап.
2) Создаем битмап с полом и рисуем туда методом copyPixel наш мувик из битмапки столько раз сколько нужно.
3) Когда выходим за границу экрана, то создаем новый bitmap, выравниваем его так чтобы казалось, что пол зациклен и присваиваем ему битмапдату нашего пола.


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

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