Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   smooting для контейнера Sprite или MovieClip (http://www.flasher.ru/forum/showthread.php?t=157279)

XBEEN 03.06.2011 01:46

smooting для контейнера Sprite или MovieClip
 
Подскажите плз. Есть ли какое-нибудь решение изменять параметр smoothing всем "растровым детям и внукам" контейнера Sprite, а еще лучше MovieClip?
Задача такова, что необходимо выполнять в определенный момент анимацию масштабирования контейнера, включающего растровые объекты и клипы с растровыми объектами. Естественно, что без smoothing качество растра страдает.

Wolsh 03.06.2011 02:33

Ну если не знаете, откуда у вас дети берутся, то перебором
Код AS3:

function smoothAll(container:DisplayObjectContainer):void
{
    for(var i:uint = 0; i < container.numChildren; i++)
    {
        var child:DisplayObject = container.getChildAt(i);
        if (child is Bitmap)
        {
            (child as Bitmap).smoothing = true;
        }
    }
}


goodguy 03.06.2011 07:52

Цитата:

включающего растровые объекты и клипы с растровыми объектами
Они не могут взяться из ниоткуда. Если эти картинки берутся из библиотеки Flash IDE, то им можно задать параметр smoothing заранее в меню properties

XBEEN 03.06.2011 11:17

Цитата:

Сообщение от goodguy (Сообщение 1000927)
Они не могут взяться из ниоткуда. Если эти картинки берутся из библиотеки Flash IDE, то им можно задать параметр smoothing заранее в меню properties

Мне не подходит вариант задавать параметр сглаживания в библиотеке, т.к. в он необходим только в условиях анимации объекта. В спокойном состояние сглаживание ухудшает резкость картинки.

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

Сообщение от Wolsh (Сообщение 1000914)
Ну если не знаете, откуда у вас дети берутся, то перебором
Код AS3:

function smoothAll(container:DisplayObjectContainer):void
{
    for(var i:uint = 0; i < container.numChildren; i++)
    {
        var child:DisplayObject = container.getChildAt(i);
        if (child is Bitmap)
        {
            (child as Bitmap).smoothing = true;
        }
    }
}


Видимо без рекурсии здесь не обойтись. Ведь контейнер может содержать другие контейнеры с растром. Мне нужен универсальный способ с возможностью сглаживать растр не только в спрайтах, но и в клипах.

goodguy 03.06.2011 11:44

Ну этот способ как раз и подходит для обоих. И MovieClip и Sprite наследуют от DisplayObject

п.с. А рекурсия тут абсолютно не нужна. Способ описанный Wolsh-ем самый подходящий в такой ситуации

XBEEN 03.06.2011 15:33

Цитата:

Сообщение от goodguy (Сообщение 1000950)
Ну этот способ как раз и подходит для обоих. И MovieClip и Sprite наследуют от DisplayObject

п.с. А рекурсия тут абсолютно не нужна. Способ описанный Wolsh-ем самый подходящий в такой ситуации

То что используется суперкласс DisplayObject - это естественно, но без рекурсии никак, ведь в контейнере может быть еще контейнеры и в этих контейнера еще могут быть контейнеры и т.д. Мне нужен универсальный способ с учетом "многоуровневой вложенности" объектов, в каждом из которых может оказаться растровый объект, которому нужно поменять значение свойства smoothing.

Что касается мувиклипов, то нет гарантии, что клип не перейдет на новый кадр в котором может оказаться растровый объект. В этом случае нужно какое-то событие, если клип меняет текущий кадр, то проверять есть ли в этом кадре какой-то объект, имеющий возможно растровый объект или являющийся растровым объектом и задать ему текущее значение свойства smoothing.

Wolsh 03.06.2011 20:56

Столько слов. Достаточно одной строчки.
Код AS3:

        if (child is Bitmap)
        {
            (child as Bitmap).smoothing = true;
        }
        if (child is DisplayObjectContainer)
        {
            smoothAll(child);
        }


XBEEN 04.06.2011 03:13

А что будет в случае мувиклипа? Если вложенный мувик перейдет на кадр, где есть растр. Можно ли это как-то отследить каким-нибудь событием изменения кадра клипа?

Wolsh 04.06.2011 04:58

1. Это уже не ко мне вопрос – я никогда не программировал мультфильмы. Для меня покадровая мультипликация и программирование приложений – две непересекающиеся технологии Flash. Возможно, в играх неизбежны коллизии, но там и подходы другие))
2. Если вам недорог фпс, повесьте этот метод обработчиком события ENTER_FRAME от корневого клипа, будет выполняться на каждый кадр. Как решить проблему с разным фпс во внутренних клипах – даже думать не хочу, ибо –
3. Вы занимаетесь ерундой. Утверждение, что смутинг портит качество картинок, надумано. Смутинг вступает в действие только когда изображение изменяет размер. На изображения с исходным размером он не действует и не может их испортить. А изображение, изменившее размер без смутинга, выглядит реально ужасно. Но если не согласны с этим – см. п.2

goodguy 04.06.2011 09:45

Цитата:

3. Вы занимаетесь ерундой. Утверждение, что смутинг портит качество картинок, надумано.
Я бы даже добавил. Тут ерунда - уже вообще сам подход. Нужно придумать совершенно другой способ. Такая вложенность + переходы по разным кадрам = один сплошной геморой.


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

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