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

iillyyaa 26.09.2010 02:48

Как добавить бекграунд у контейнера ?
 
суть, имеем контейнер

Код AS3:

var cont_prim:Sprite = new Sprite();

в него складываем разные тексты

Код AS3:

cont_prim.addChild(to_cont_opisanie);
cont_prim.addChild(to_cont_opisanie2);

хочется сделать, что бы был у этого контейнера бекграунд, а не прозрачный контейнер с текстами.. можно как то указать спрайту cont_prim бекграунд ? ну и рамку заодно :)

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

f.g.programmer 26.09.2010 11:06

А чем вам банальный способ не нравится? Можно врисовывать прямоугольник в cont_prim.graphics, и перерисовывать его при добавлении текстов.

iillyyaa 26.09.2010 14:08

я думал может есть какой то способ проще.. сразу что бы появился фон у контейнера.. не надо было бы постоянно менять размеры :)

TanaTiX 26.09.2010 14:48

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

samana 26.09.2010 14:50

А вы подпишите клип-фон на событие, и при появлении в нём чего нибудь пусть срабатывает функция масштабирования.
Код AS3:

fon.addEventListener(Event.ADDED,resizeIt)
function resizeIt(e:Event):void{
...
}


alatar 26.09.2010 15:21

Событие ADDED сработает один раз, когда контейнет (ну или фон, не важно) будет добавлен в дисплейлист родителя. Нужно переопределить addChild, removeChild и там уже вызывать перерисовку (если детишки не будут двигаться и менять размеры).

iillyyaa 26.09.2010 16:33

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

я думал может можно к самому спрайту-контейнеру прилепить бекграунд :)
типа контейнер.бекграунд = фффффф; :)

TanaTiX 26.09.2010 16:39

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

КорДум 26.09.2010 16:51

Черт знает, что у вас там конкретно за задача, но вот: http://help.adobe.com/ru_RU/AS3LCR/F...ackgroundColor

iillyyaa 26.09.2010 17:03

так, возник вопрос, что лучше добавить на бекграунд ?

Код AS3:

var to_cont_bg = new Sprite();
to_cont_bg.graphics.lineStyle(1, 0x0000FF);
to_cont_bg.graphics.beginFill(0xCCFFCC);
to_cont_bg.graphics.drawRect(0, 0, 1000, 1000);
to_cont_bg.x = 0;
to_cont_bg.y = 0;
cont_prim.addChild(to_cont_bg);

если делать размеры прямоугольника 10х10 а потом растягивать, то растягивается и рамка (тоесть её толщина)

единственное что придумал, это сделать прямоугольник 1000х1000, потом уменьшить до 10х10 и потом опять уже увеличить до размера контейнера

Код AS3:

to_cont_bg.width = 10;
to_cont_bg.height = 10;
to_cont_bg.width = cont_prim.width;
to_cont_bg.height = cont_prim.height;

Добавлено через 3 минуты
КорДум, не, бекграунд у текстового поля не то.. у меня несколько текстовых полей в контейнере, так же там будет графика чуть..

тоесть текст1 в координатах 0х0
текст2 в координатах 50х50
картинка в координатах 100х100
текст3 в координатах 120х200

и вот размер контейнера стал к примеру 250х350
все тексты без бекграундов, а нужен общий бекграунд у всего контейнера и рамку...

это будет всплывающая подсказка (да вот такая навороченная)

ExtendedPlay 26.09.2010 17:12

Цитата:

если делать размеры прямоугольника 10х10 а потом растягивать, то растягивается и рамка (тоесть её толщина)
попробуйте написать так:
Код AS3:

//to_cont_bg.graphics.lineStyle(1, 0x0000FF);
to_cont_bg.graphics.lineStyle(1, 0x0000FF, 1, false, LineScaleMode.NONE);

и почитайте про Graphics.

iillyyaa 26.09.2010 17:36

ага, за это спасибо.. :)

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

Wolsh 27.09.2010 01:22

1. Не используйте обводку. Никогда. Рисуйте две заливки, вторая меньше первой.
2. Лучше вообще не масштабировать, а просто очищать и перерисовывать заново в новых размерах. Это не 3D-шутер, скорости Вам более чем хватит.

Хомяк 27.09.2010 02:00

Код AS3:

 var mySprite:Sprite=new Sprite;
mySprite.opaqueBackground=0xFFFFFF;


iillyyaa 27.09.2010 03:14

Хомяк, вот это в разы лучше размещения квадрата... а бордюрчик можно ? :)

etc 27.09.2010 12:15

Цитата:

Сообщение от iillyyaa (Сообщение 938696)
Хомяк, вот это в разы лучше размещения квадрата... а бордюрчик можно ? :)

Фильтром можно попробовать.

NumpuT 27.09.2010 12:48

А через SetStyle("background", needcolor ) вроде проще!

etc 27.09.2010 12:57

Цитата:

Сообщение от NumpuT (Сообщение 938747)
А через SetStyle("background", needcolor ) вроде проще!

Такого метода нет у Sprite.

Wolsh 27.09.2010 13:27

Ну я как поклонник градиентов, прозрачностей и пресловутой "расширяемости кода" отметаю такие подходы сразу. Лучше один раз разобраться с Графикс и всегда иметь этот гибкий инструмент в своем арсенале. Впрочем, если задача узка и конкретна, можно и такими "дубовыми" способами как opaqueBackground.

NumpuT 27.09.2010 13:48

Цитата:

Сообщение от etc (Сообщение 938749)
Такого метода нет у Sprite.

У UIComponent есть styleDeclaration. От Sprite до UIComponent совсем немного:)

etc 27.09.2010 13:55

Цитата:

Сообщение от NumpuT (Сообщение 938759)
У UIComponent есть styleDeclaration. От Sprite до UIComponent совсем немного:)

Ага, т. е. применять этого монстра с кучей косяков лучше, чем написать пару доп. методов?

NumpuT 27.09.2010 14:08

Цитата:

Сообщение от etc (Сообщение 938761)
Ага, т. е. применять этого монстра с кучей косяков лучше, чем написать пару доп. методов?

Это зависит от ситуации - где, как-дого, нужно ли будет редактировать, изменять ....


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

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