Просмотр полной версии : Проблема с прорисовкой маски
Здравствуйте!
Когда я присваиваю объекту маску во время движения, то часть объекта остаётся в одном месте, потом появляется уже в движущимся объекте.
Как можно это исправить?
crovels.swf
маску куда добавляете?
Есть класс Кровел. Он привязан к MovieClip объекту. В этом классе есть переменная objectMask. Этой переменной я присваиваю другой объект MovieClip. Потом в классе Кровел пишу: objectMask.mask = this.
Кровел и другой объект MovieClip находятся в одном MovieClip.
Этим кодом вы назначаете объекту objectMask в качестве маски всё содержимое класса Кровел. Так и задумано? А не наоборот ли хотели?
Этим кодом вы назначаете объекту objectMask в качестве маски всё содержимое класса Кровел. Так и задумано? А не наоборот ли хотели?
Наоборот не могу.
Странно.
Сделал разделение MovieClip круга в кровеле (объекте с двумя линиями) и проблема с маской исчезла (ну почти).
crovels.swf
Скажите, объект objectMask добавлен как ребёнок в классе Кровел?
Скажите, объект objectMask добавлен как ребёнок в классе Кровел?
Нет.
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 - это то, что я использую как маску (или в качестве маски).
Но если я правильно понял ваш код, то liquid (он же objectMask ) вы не используете как маску. А используете класс Crovel как маску для liquid (он же objectMask ).
objectMask.mask = this;
Маской для объекта objectMask, служит this. А this - это ссылка на текущий класс, то есть Crovel.
Но если я правильно понял ваш код, то liquid (он же objectMask ) вы не используете как маску. А используете класс Crovel как маску для liquid (он же objectMask ).
objectMask.mask = this;
Маской для объекта objectMask, служит this. А this - это ссылка на текущий класс, то есть Crovel.
Изначально я хотел сделать так, чтобы от разноцветной картинки (жидкость) были видны только части Кровела (усы и круг). Когда я сделал маской разноцветную картинку, то ничего не было видно. Когда я сделал маску Кровела, то картинка появилась.
Возникла проблема: Когда появляется маска, то круг кровела почему-то отстаёт во время движения. Я это исправил разделив MovieClip круга.
Раз после разделения всё начало нормально работать, то почему оно работает нормально? Ведь усы же тоже MovieClip. Почему они не отстают?
Ага, я наконец-то понял вашу задумку!
Ага, я наконец-то понял вашу задумку!
Я попробовал сделать вращение круга Кровела (так как усы MovieClip и проблем с маской нет, но они в отличие от круга вращаются) и в итоге проблемы с маской исчезли.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.