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

Dip52 12.11.2013 16:46

Проблема с прорисовкой маски
 
Вложений: 1
Здравствуйте!

Когда я присваиваю объекту маску во время движения, то часть объекта остаётся в одном месте, потом появляется уже в движущимся объекте.

Как можно это исправить?

crovels.swf   (97.1 Кб)

GBee 12.11.2013 17:18

маску куда добавляете?

Dip52 12.11.2013 17:50

Цитата:

Сообщение от GBee (Сообщение 1152117)
маску куда добавляете?

Есть класс Кровел. Он привязан к MovieClip объекту. В этом классе есть переменная objectMask. Этой переменной я присваиваю другой объект MovieClip. Потом в классе Кровел пишу: objectMask.mask = this.
Кровел и другой объект MovieClip находятся в одном MovieClip.

samana 12.11.2013 18:02

Этим кодом вы назначаете объекту objectMask в качестве маски всё содержимое класса Кровел. Так и задумано? А не наоборот ли хотели?

Dip52 12.11.2013 18:32

Цитата:

Сообщение от samana (Сообщение 1152123)
Этим кодом вы назначаете объекту objectMask в качестве маски всё содержимое класса Кровел. Так и задумано? А не наоборот ли хотели?

Наоборот не могу.

Dip52 12.11.2013 21:25

Вложений: 1
Странно.
Сделал разделение MovieClip круга в кровеле (объекте с двумя линиями) и проблема с маской исчезла (ну почти).
crovels.swf   (110.4 Кб)

samana 12.11.2013 21:28

Скажите, объект objectMask добавлен как ребёнок в классе Кровел?

Dip52 12.11.2013 21:30

Цитата:

Сообщение от samana (Сообщение 1152138)
Скажите, объект objectMask добавлен как ребёнок в классе Кровел?

Нет.

Код AS3:

package classes
{
        import flash.events.Event;
        import flash.display.MovieClip;
        import classes.fond.Fields;
        import flash.utils.Timer;
        import flash.events.TimerEvent;
        import flash.display.Sprite;
 
        public class Crovel extends MovieClip
        {
                private var randomRotation:Number = 180; //Кровел двигается в ту сторону в которую он повёрнут, поэтому его движение будет меняться через какой-то интервал:
                private var timerSetRandomRotation:Timer = new Timer(Settings.ROTATION);        //Таймер задающий случайное движение кровелу:
                private const SPEED:Number = Settings.SPEED;
                public var objectMask:Sprite
 
                public function Crovel(liquid:MovieClip)
                {
                        rotation = randomRotation;
                        Fields.FIELDFORCROVELS.addChild(this);
                        objectMask = liquid;
                        objectMask.visible = false;
                        Fields.FIELDFORCROVELS.addChild(liquid);
                        this.addEventListener(Event.ENTER_FRAME,rotationHorns);
                        timerSetRandomRotation.addEventListener(TimerEvent.TIMER,setRandomRotation);
                        timerSetRandomRotation.start();
                        this.addEventListener(Event.ENTER_FRAME,move);
                }
                //Движение кровела:
                private function move(event:Event):void
                {
                        objectMask.x = x;
                        objectMask.y = y;
                        var p:Number = Prohibition.prohibition(this);
                        if(p == Number.MAX_VALUE)
                        {
 
                        }
                        else
                        {
                                rotation = randomRotation = p;
                                timerSetRandomRotation.reset();
                                timerSetRandomRotation.start();
                        }
                        y -= SPEED * Math.cos(randomRotation * (Math.PI / 180));
                        x += SPEED * Math.sin(randomRotation * (Math.PI / 180));
                }
                //Вращение усиков:
                private function rotationHorns(event:Event)
                {
                        hornsOne.rotation -= 10;
                        hornsTwo.rotation += 5;
                }
                //Установка случайного движения кровелу:
                private function setRandomRotation(event:TimerEvent):void
                {
                        var choice:int = Math.random() * 3;        //Выбор положительной или отрицательной стороны:
                        if(choice == 1)
                        {
                                randomRotation = Math.random() * -360;
                                objectMask.mask = this;
                                objectMask.visible = true;
                        }
                        else
                        {
                                randomRotation = Math.random() * 360;
                                objectMask.mask = null;
                                objectMask.visible = false;
                        }
                        rotation = randomRotation;
                }
        }
}

liquid - это то, что я использую как маску (или в качестве маски).

samana 12.11.2013 21:39

Но если я правильно понял ваш код, то liquid (он же objectMask ) вы не используете как маску. А используете класс Crovel как маску для liquid (он же objectMask ).
Код AS3:

objectMask.mask = this;

Маской для объекта objectMask, служит this. А this - это ссылка на текущий класс, то есть Crovel.

Dip52 12.11.2013 21:49

Цитата:

Сообщение от samana (Сообщение 1152140)
Но если я правильно понял ваш код, то liquid (он же objectMask ) вы не используете как маску. А используете класс Crovel как маску для liquid (он же objectMask ).
Код AS3:

objectMask.mask = this;

Маской для объекта objectMask, служит this. А this - это ссылка на текущий класс, то есть Crovel.

Изначально я хотел сделать так, чтобы от разноцветной картинки (жидкость) были видны только части Кровела (усы и круг). Когда я сделал маской разноцветную картинку, то ничего не было видно. Когда я сделал маску Кровела, то картинка появилась.

Возникла проблема: Когда появляется маска, то круг кровела почему-то отстаёт во время движения. Я это исправил разделив MovieClip круга.
Раз после разделения всё начало нормально работать, то почему оно работает нормально? Ведь усы же тоже MovieClip. Почему они не отстают?


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

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