PDA

Просмотр полной версии : Как сделать так чтобы граница квадрата не менялась


grafillo!
26.09.2013, 15:51
Создаю квадрат методами инструментами флеш у него граница шириной 6 пикселей, этот квадрат использую как диалоговое окно для показа фотографий следовательно размер квадрата меняется в зависимости от размера фотки. Чем больше фотка тем больше граница то есть она становится шириной в 10 пикселей и это конкретно видно что размер границы меняется при просмотре разных фоток. Как сделать так чтобы граница всегда была одной ширины при растяжении квадрата?
dialog_window.dialogFon.height = foto.height + 200;
правда не знаю чем может помочь мой код х)
dialogFon - это и есть тот квадрат

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

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

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

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
"Граница" это рамка?
Вы меняете размер квадрата, пропорционально изменению размера квадрата меняется и рамка. Чтобы рамка размер не меняла можно ее отрисовывать вручную.
Как вариант убрать рамку с квадрата и отрисовать ее отдельно. При изменении размеров квадрата менять рамку как нужно.

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/showthread.php?t=141434&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/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#drawRect()
А вообще поиск еще работает.

Akopalipsis
26.09.2013, 23:19
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
Просили "рамку вокруг [квадрата]". Никогда бордер (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.
Никто Вам не напишет кусок кода, который Вы скопируете и вставите в свой. Набор в новый сезон Битвы Экстрасенсов уже закончен. Нет кода — не будет исправлений кода.