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

grafillo! 26.09.2013 15:51

Как сделать так чтобы граница квадрата не менялась
 
Создаю квадрат методами инструментами флеш у него граница шириной 6 пикселей, этот квадрат использую как диалоговое окно для показа фотографий следовательно размер квадрата меняется в зависимости от размера фотки. Чем больше фотка тем больше граница то есть она становится шириной в 10 пикселей и это конкретно видно что размер границы меняется при просмотре разных фоток. Как сделать так чтобы граница всегда была одной ширины при растяжении квадрата?
Код AS3:

dialog_window.dialogFon.height = foto.height + 200;

правда не знаю чем может помочь мой код х)
dialogFon - это и есть тот квадрат

KumoKairo 26.09.2013 16:09

Вложений: 1
Нужно воспользоваться старым приемом создания границ - берете набор заготовок для границ, в простейшем случае должно получится 3 элемента (если не лень переворачивать): горизонтальный элемент, вертикальный элемент и элемент для границ. Более сложные случаи включают в себя большее количество элементов. Например такой набор:
Вложение 30026

И делать границу из этих кусков. Очень распространенный способ и полностью подходит для вашего случая

WisP 26.09.2013 16:11

"Граница" это рамка?
Вы меняете размер квадрата, пропорционально изменению размера квадрата меняется и рамка. Чтобы рамка размер не меняла можно ее отрисовывать вручную.
Как вариант убрать рамку с квадрата и отрисовать ее отдельно. При изменении размеров квадрата менять рамку как нужно.
Код AS3:

dialog_window.dialogFon.height = foto.height + 200;
dialog_window.dialogFrame.height = dialog_window.dialogFon.height+6*2;
dialog_window.dialogFrame.y = dialog_window.dialogFon.y - 6;


grafillo! 26.09.2013 16:17

Цитата:

Сообщение от WisP (Сообщение 1146963)
"Граница" это рамка?
Вы меняете размер квадрата, пропорционально изменению размера квадрата меняется и рамка. Чтобы рамка размер не меняла можно ее отрисовывать вручную.
Как вариант убрать рамку с квадрата и отрисовать ее отдельно. При изменении размеров квадрата менять рамку как нужно.
Код AS3:

dialog_window.dialogFon.height = foto.height + 200;
dialog_window.dialogFrame.height = dialog_window.dialogFon.height+6*2;
dialog_window.dialogFrame.y = dialog_window.dialogFon.y - 6;


аааа то есть добавить ещё один элемент надо, во пипец, терь понятно х)
а способ из кусков чёт ваще не понравился х)

Добавлено через 12 минут
а как вручную отрисовать рамку чёт не допёр, рисую рамку отдельно получается точно такая же история(((

lexa2000lexa 26.09.2013 19:24

посмотрите вот эту темы http://www.flasher.ru/forum/showthre...page=2#Scene_1

grafillo! 26.09.2013 21:19

а можно как-нибудь с помощью кода нарисовать рамку вокруг квадрата?

Akopalipsis 26.09.2013 21:41

Цитата:

а можно как-нибудь с помощью кода нарисовать рамку вокруг квадрата?
Абсолютно точно так же как и квадрат.

grafillo! 26.09.2013 21:58

пример кода есть?

WisP 26.09.2013 22:10

http://help.adobe.com/en_US/FlashPla...html#drawRect()
А вообще поиск еще работает.

Akopalipsis 26.09.2013 23:19

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class Frame extends Sprite
        {
                private var _rect:Sprite;
 
                public function Frame()
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(event:Event=null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        stage.addEventListener(Event.RESIZE, stage_resizeHandler);
                        stage.addEventListener(Event.ACTIVATE, stage_resizeHandler);
                        _rect = new Sprite();
                }
 
                private function stage_resizeHandler(event:Event):void
                {
                        _rect.graphics.lineStyle(15, 0xC683E2, 1, false, 'none', null, null, 3);
                        _rect.graphics.drawRect(100, 100, 200, 70);
                        _rect.graphics.endFill();
                        addChild(_rect);
                }
 
        }
 
}


Wolsh 26.09.2013 23:33

Что такое "(100, 100, 200, 70)"?

Akopalipsis 26.09.2013 23:35

x,y,width,height.. А что не так?)

Добавлено через 3 минуты
Если конечно ТС рисует при помощи встроенных инструментов, то ему это не поможет..
Но он спросил про программный метод...

Wolsh 26.09.2013 23:41

Вложений: 1
Просили "рамку вокруг [квадрата]". Никогда бордер (lineStyle) не был "вокруг". Да и круглых углов не просили.
То есть мне интересно, что такое 200 и 70 — это размеры чего? Потому что в результате Вашего кода 200 и 70 это вот что:
Вложение 30027
То есть это не размеры рамки и не размеры прямоугольника, который надо окружить рамкой.

Akopalipsis 26.09.2013 23:48

Ну я ещё глупый, мне простительно!)
И я даже не возьмусь drawPath-ом рисовать, потому что я не знаю как ТС потом его применит.
Тогда проще всего нарисовать ещё один квадрат - подложку.

Wolsh 26.09.2013 23:56

Вы думаете, при drawPath() линия будет рисоваться как-то по-другому?
Толщина линии (обводки, бордера) всегда рисуется в обе стороны от центра линии. Таким образом фигура с обводкой всегда ломает мозг несчастного программиста — в коде одно, на экране нечто абсолютно другое. Другие координаты, другие размеры. Все почему-то друг на друга наезжает и вообще первобытный хаос.
Можно конечно научиться все эти нюансы учитывать и пересчитывать, и комментировать код (да, ведь его потом когда-нибудь и читать придется, пойди разберись что за странные хардкодные чиселки добавлены-отняты). Но лучше забить на линии и рисовать заливкой. Линию надо использовать только там, где нужна линия.

grafillo! 27.09.2013 00:48

не ну я уже себе мозг сломал, не могу нарисовать масшатбируемое красивое диалогове окно и пипец, прям хоть применяй способ который во втором посте подсказали(((

Akopalipsis 27.09.2013 01:00

я не знаю как Вы делаете, но разве это сложно? У Вас есть квадрат, в который грузится фото?
И Вы этому квадрату задаёте размеры в зависимости от размера фото. Почему Вы не создадите второй квадрат, который будет чуть больше первого и обьеденён с ним. При масштабе первого и второй будет изменяться в таких же пропорциях.

grafillo! 27.09.2013 01:10

я так и сделал, но у меня округленные углы при растягивании углы приобретают пипец кривую форму((

Akopalipsis 27.09.2013 01:21

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

Wolsh 27.09.2013 01:59

Надо перерисовывать при "растягивании". Не растягивать уже нарисованное, а рисовать заново, новых размеров. Либо разобраться со scale9grid.
Никто Вам не напишет кусок кода, который Вы скопируете и вставите в свой. Набор в новый сезон Битвы Экстрасенсов уже закончен. Нет кода — не будет исправлений кода.


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

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