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

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

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

Регистрация: Jan 2011
Сообщений: 247
По умолчанию рисование\удаление масок

Возникла проблема с перерисовкой масок, вот код :
Код AS3:
conteinerForMask = new Sprite();
	addChild(conteinerForMask);
    conteinerForMask.addEventListener(MouseEvent.MOUSE_DOWN, canMakeClean);
    conteinerForMask.addEventListener(MouseEvent.MOUSE_UP, cantMakeClean);
    conteinerForMask.addEventListener(MouseEvent.MOUSE_MOVE, makeCleanStep1);
 
	private function drawMaskForStepShower():void {
        switch (numStepShower) {
            case 1 :
                DrawSlotForMasks();
                slotForRemove(lib.Lib_Face_1);
                slotForDraw(lib.Lib_Face_2);
                startCountPixels = getCountPixels();
                break;
            case 2 :
                DrawSlotForMasks();
                slotForRemove(lib.Lib_Face_2);
                slotForDraw(lib.Lib_Face_3);
                startCountPixels = getCountPixels();
                break;
            default :
                // error
                break;
        }
    }
	 private function DrawSlotForMasks():void{
        FaceShowerSpriteForDraw = new Sprite();
        FaceShowerSpriteForRemove = new Sprite();
        FaceShowerSpriteForRemove.blendMode = BlendMode.LAYER;
 
        conteinerForMask.addChild(FaceShowerSpriteForRemove);
        conteinerForMask.addChild(FaceShowerSpriteForDraw);
    }
 
    private function slotForDraw(mc:MovieClip):void {
        mc.cacheAsBitmap = true;
        mc.mask = currentItemForDraw;
        FaceShowerSpriteForDraw.addChild(mc);
    }
 
    private function slotForRemove(_mc:MovieClip):void {
        var mcremove:MovieClip = new MovieClip();
        mcremove = _mc;
        mcremove.cacheAsBitmap = true;
        mcremove.blendMode = BlendMode.LAYER;
        FaceShowerSpriteForRemove.addChild(mcremove);
 
        var mcDel:MovieClip = new MovieClip();
        mcDel.graphics.beginFill(0x000000);
        mcDel.graphics.drawRect(0, 0, 200, 300);
        mcDel.graphics.endFill();
        mcDel.cacheAsBitmap = true;
        mcDel.blendMode = BlendMode.ERASE;
        mcDel.mask = currentItemForRemove;
        FaceShowerSpriteForRemove.addChild(mcDel);
    }
 
	 private function cantMakeClean(e:MouseEvent):void {
        currentItemForRemove.Clean = false;
    }
 
    private function canMakeClean(e:MouseEvent):void {
        currentItemForRemove.Clean = true;
 
    }
 
    private function makeCleanStep1(e:MouseEvent):void {
        if (currentItemForRemove.Clean) {
            currentItemForRemove.graphics.beginFill(0xff00ff);
            currentItemForRemove.graphics.drawCircle(mouseX, mouseY, 20);
            currentItemForRemove.graphics.endFill();
            currentItemForDraw.graphics.beginFill(0xff00ff);
            currentItemForDraw.graphics.drawCircle(mouseX, mouseY, 20);
            currentItemForDraw.graphics.endFill();
        }
    }
 
	//очистка происходит так : 
	numStepShower++;
    conteinerForMask.removeChild(FaceShowerSpriteForRemove);
    conteinerForMask.removeChild(FaceShowerSpriteForDraw);
    FaceShowerSpriteForDraw = null;
    FaceShowerSpriteForRemove = null;
    drawMaskForStepShower();
После очистки запускается метод drawMaskForStepShower() и заново как первоночально было сделано уже не получается, как мне все очистить и повторить аналогично только с другими мувиками на тех же контейнерах?
Или может есть другой способ удаление одной маски и нанесение сверху сразу другой ?

Старый 13.07.2014, 13:02
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Возможно это только я не смог понять, но если можно, то объясните хотя бы - что к чему? Как это должно работать и что собственно говоря происходит?

Старый 13.07.2014, 13:07
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 3  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от samana Посмотреть сообщение
Возможно это только я не смог понять, но если можно, то объясните хотя бы - что к чему? Как это должно работать и что собственно говоря происходит?
на спрайт - conteinerForMask ложу еще два спрайта, чтобы с одного я удалял маску а со второго наносил.
когда срабатывают события по главному спрайту conteinerForMask получается делаю действие сразу на двух масках одновременно удаляю и тут-же наношу другую.Проблема в том что по второму кругу так же само не сделать, без понятия почему он не хочет...

Добавлено через 3 часа 12 минут
Проблема решена вот что не хватало в очистке :
Код AS3:
currentItemForDraw.graphics.clear();
currentItemForRemove.graphics.clear();
может кому-то пригодиться.


Последний раз редактировалось GrafMine; 13.07.2014 в 14:38.
Создать новую тему Ответ Часовой пояс GMT +4, время: 12:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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