Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   объеденение двух rectangle (http://www.flasher.ru/forum/showthread.php?t=141485)

3p.station 25.06.2010 22:48

объеденение двух rectangle
 
Доброго времени суток господа и господини :drinks:
вот уже второй день пытаюсь найти решение и - ниалё :confused:

казалось бы простая штука встала перед моим мозговым обработчиком но в итоге оказалась тупиковой для меня

задача: слепить большой и маленький прямоугольник так чтобы один мог ездить по линии соединения с другим причем что у этих прямоугольников есть линия цветная а в месте слипания этих прямоугольников ее не должно быть . и все вроде просто но у этих двух прямоугольников есть скругленные углы которые и "вылазят" когда соединение происходит в конце и + эти прямоугольники плупрозрачны тоесть один на другой просто так не нацепить

вот и картинка
[IMG]http://s57.***********/i158/1006/fa/e37eec0605bc.jpg[/IMG]

может кто делал подобное поделитесь идеями как такое организовать

потому как мой нынешний вариант - использование пнг и маски как-то кривенько
спаисбо

Wolsh 25.06.2010 23:39

Если лень делать геометрические рассчеты для рисования в Graphics, можно сделать два спрайта, в один поместить полупрозрачный фон, а в другой - два черных прямоугольника, и сделать его маской к первому. Бордер же можно организовать фильтром - glow или dropshadow без смещения.

Добавлено через 1 час 12 минут
Вот пример...
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.display.BlendMode;
        import flash.events.Event;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.MouseEvent;
        import flash.filters.DropShadowFilter;
        import flash.geom.Rectangle;
 
        public class Main extends Sprite
        {
                private var _container      :Sprite = new Sprite();
                private var _mask            :Sprite = new Sprite();
                private var _background      :Sprite = new Sprite();
                private var _staticRectangle :Sprite = new Sprite();
                private var _dynamicRectangle:Sprite = new Sprite();
                private var _dragRect        :Rectangle = new Rectangle(0, 0, 0, 400);;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
 
                        // entry point
                        addChild(_container);
                        _container.x = _container.y = 50;
                        _background.graphics.beginFill(0x000000, 0.5);
                        _background.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
                        _staticRectangle.graphics.beginFill(0x000000, 1);
                        _staticRectangle.graphics.drawRoundRect(0, 0, 500, 500, 12);
                        _mask.addChild(_staticRectangle);
                        _staticRectangle.x = 150;
                        _dynamicRectangle.graphics.beginFill(0x000000, 1);
                        _dynamicRectangle.graphics.drawRoundRect(0, 0, 200, 100, 12);
                        _mask.addChild(_dynamicRectangle);
                        _mask.graphics.beginFill(0x000000, 0);
                        _mask.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
                        ////
                        _container.addChild(_background);
                        _container.addChild(_mask);
                        _mask.cacheAsBitmap = true;
                        _mask.blendMode = BlendMode.ALPHA;
                        _background.blendMode = BlendMode.NORMAL;
                        _container.blendMode = BlendMode.LAYER;
                        // цвет и соотношения прозрачностей заливки и бордера регулировать здесь - в настройках фильтра (дробные числа).
                        _container.filters = [new DropShadowFilter(0, 90, 0x000000, 0.10, 2, 2, 10.00, 3, false, true, true)];
 
                        _dynamicRectangle.addEventListener(MouseEvent.MOUSE_DOWN, onPress);
                }
                private function onPress(event:MouseEvent):void
                {
                        _dynamicRectangle.removeEventListener(MouseEvent.MOUSE_DOWN, onPress);
                        _dynamicRectangle.addEventListener(MouseEvent.MOUSE_UP, onUp);
                        _dynamicRectangle.startDrag(false, _dragRect);
                }
                private function onUp(event:MouseEvent):void
                {
                        _dynamicRectangle.removeEventListener(MouseEvent.MOUSE_UP, onUp);
                        _dynamicRectangle.addEventListener(MouseEvent.MOUSE_DOWN, onPress);
                        _dynamicRectangle.stopDrag();
                }
        }
 
}


Wolsh 26.06.2010 01:09

Вложений: 1
Забыл файлик прикрутить)

3p.station 26.06.2010 01:43

товарисч!
ощутил вашу поддержку и ...

да будут счастливы все существа на земле

спасибо


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

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