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

kia007 20.07.2008 19:21

скрытие некоторых частей клипа
 
Всем привет!
Столкнулся тут с проблемой(нашел решение но оно очень фиговое):
Есть фоновый мувиклип - fon_mc(карта), на этом фоне есть несколько мувиклипов(одинаковых или разных) - clip1, clip2, clip3 и тд(здания, различные предметы...). Каждый из этих клипов содержит две части(2 клипа). Первая часть всегда видима, а вторая скрывается при условии наведения на него мыши. Причем чем ближе мышка подошла ко второй части тем прозрачнее она становится....и становится видимым фон.

Т.е. вот например реальная ситуация - пользователь водит мышкой по карте (изометрия)где есть несколько зданий и при приближении мышки к какой либо части здания эта часть становится прозрачной(в зависимости от близости мыши к этой части), причем некоторые другие части здания могут всегда оставаться видимыми, независимо от положения мыши.

А вопрос - как это сделать?

Скорее всего(я уверен на 99%) это делается с помощью масок, но не могу понять как именно...
Если кто то не понял ситуации, то могу как то картинками пояснить.
Можно подсказать словестно а можно кодом, и тому и другому буду очень рад.

Спасибо за внимание!))

silin 20.07.2008 21:05

так пусть эти мувики и следят (по ENTER_FRAME или MOUSE_MOVE) за расстоянием до мыши и меняют свою альфу..

kia007 20.07.2008 21:12

ну как бы можно такой вариант использовать но тогда придется дробить один клип на несколько, объясню на примере:
Стену здания предполагалось делать одним клипом, и при приближении мыши к какой то части стены эта часть становится прозрачной, при этом другие части стены остаются не прозрачными(если они достаточно далеко от мыши).

silin 20.07.2008 21:56

если не дробить, то можно накрыть мувик маской, в которой рисовать полупрозрачный градиент в зависимости от положения мыши..
обязательные условия чтоб такая маска работала:
cacheAsBitmap=true для обоих (и мувику и маске)
и присутствие маски в дисплейЛисте (addChild )
Код:

package
{
        import flash.display.*;
        import flash.events.*;
        import flash.geom.Matrix;
       
        public class Main extends Sprite
        {
                private var body:Sprite = new Sprite();
                private var maska:Shape = new Shape();
               
                public function Main():void
                {
                        body.graphics.beginFill(0x000000);
                        body.graphics.drawRect(0, 0, 300, 200);
                        body.cacheAsBitmap = true;
                        addChild(body);
                       
                        maska.cacheAsBitmap = true;
                        addChild(maska);
                       
                        body.mask = maska;
                        addEventListener(Event.ENTER_FRAME, enterFrameHandker);
                }
               
                private function enterFrameHandker(e:Event):void
                {
                        var fillType:String = GradientType.RADIAL;
                        var colors:Array = [0x000000, 0x000000];
                        var alphas:Array = [0, 1];
                        var ratios:Array = [0x00, 0xFF];
                        var matr:Matrix = new Matrix();
                        var tx:Number = body.mouseX - body.width / 2;
                        var ty:Number = body.mouseY - body.height / 2;
                        matr.createGradientBox(300, 200, 0, tx, ty);
                        var spreadMethod:String = SpreadMethod.PAD;
                       
                        maska.graphics.clear();
                        maska.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod); 
                        maska.graphics.drawRect(0, 0, 300, 200);
                        maska.graphics.endFill();
                }
        }
}


kia007 20.07.2008 23:10

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

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

Если есть более легкое решение то пишите!!!


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

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