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

FlashCoder 23.01.2011 15:40

Программно нарисовать
 
Хочется программно с помощью Action Script3 нарисовать такой интерфейс

http://vasyamba.com/url_img/player.png

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

Какие классы использовать? И пару примерчиков, если можно

Спасибо

drnet_ua 23.01.2011 18:57

в чем ворос?

класс graphics, рисовать прямоугольниками, прямоугольниками с закр. краями.

немного напряжно с первого раза значек фуллскрин нарисовать, и трехугольничек плей, тоже с краями

Wolsh 23.01.2011 21:02

Значек фуллскрин (как самое сложное))
Код AS3:

var icon:Shape = new Shape();
var backColor:uint = 0x000000;
var foreColor:uint = 0xFFFFFF;
with (icon.graphics)
{
        beginFill(backColor), drawRect(0, 0, 16, 16);
        beginFill(foreColor), drawRect(2, 2, 12, 12);
        beginFill(backColor), drawRect(5, 7, 6, 2);
        beginFill(backColor), drawRect(7, 5, 2, 6);
        beginFill(backColor), drawRect(6, 0, 4, 5), drawRect(6, 11, 4, 5), drawRect(0, 6, 5, 4), drawRect(11, 6, 5, 4);
        beginFill(backColor), drawRect(5, 3, 6, 1), drawRect(5, 12, 6, 1), drawRect(3, 5, 1, 6), drawRect(12, 5, 1, 6);
}
addChild(icon);
icon.x = 50, icon.y = 50;

Добавлено через 1 час 35 минут
Кнопка плей
Код AS3:

var button:Sprite = new Sprite();
button.graphics.beginFill(backColor);
button.graphics.drawRoundRect(0, 0, 50, 32, 8);
addChild(button);
button.x = 50, button.y = 50;
 
var backColor:uint = 0x000000;
var foreColor:uint = 0xFFFFFF;
var icon:Shape = new Shape();
with (icon.graphics)
{
        beginFill(foreColor), moveTo(0, 1);
        lineTo(00, 19), curveTo(0.5, 21, 3, 20);
        lineTo(18, 12), curveTo(20, 10, 18, 8);
        lineTo(03, 00), curveTo(0.5, -1, 0, 1);
}
button.addChild(icon);
icon.x = 18, icon.y = 6;


FlashCoder 23.01.2011 23:07

Wolsh Спасибо за код. Не думал, что сразу готовый код напишуь)
Буду разбираться.
Я только неделю, как Flash начал учить.
Вкратце можешь рассказать, что это за оператор with и как он работает. Я php знаю, и мне бы понять логику этого оператора. С остальными методами и классами я разберусь.



______________________________
Web-программирование

in4core 24.01.2011 00:05

with заменяет объект от длинной писанины . Тоесть было бы без него так :
Код AS3:

icon.graphics.beginFill(foreColor), icon.graphics.moveTo(0, 1);

и т.д.

Wolsh я люблю интересные конструкции, однако данная мне непонятна вообще
объект зарисовывается по строчно
Код AS3:

obj.graphics.beginFill ..... ;
obj.graphics.lineStyle ....;
and so on

А у вас идет через запятую, это че за синтаксис такой?

TanaTiX 24.01.2011 00:47

Цитата:

Значек фуллскрин (как самое сложное))
Я так понимаю, создание подобных конструкций как-то автоматизировано? Можно поподробней как это сделано?

in4core 24.01.2011 00:58

вот и я спрашиваю пояснить синтаксис. очень интересно

Wolsh 24.01.2011 01:24

Запятая? Да в общем, то же, что и точка с запятой ...в данном случае.
То есть тут нет хитрости, как в записи
Код AS3:

var s:String, c:Number, g:uint;

Можно ставить ";" - ничего не изменится. Просто когда операторы пишу в строчку, ставлю запятую.
TanaTiX, Ваш вопрос я просто не понял(( О какой автоматизации речь?

in4core 24.01.2011 01:27

Хм. странно что оператор ; стал равнятся оператору , ! Первый раз такое слышу! Может быть только в данном случае ок, а например в том же самом цикле ты не напишешь уже for ( i =0, i<5, i++) получишь ошибку синтаксиса. Так что тут все таки не обычная ситуация. Про var a,b,c это старая тема знаем

Wolsh 24.01.2011 01:54

Никто не говорил про "равняться". Это разные операторы, просто в данном случае допустимо перечисление через запятую, так же как распространенная запись x=5, y=15; Это одно предложение. В приведенном операторе for() должно быть три предложения. В этих предложениях могут быть перечисления через запятую, но предложений все же три
Код AS3:

for( i = 0, a = 16; i < 9; i ++, a *= i ) {}


in4core 24.01.2011 02:07

Ну это я вкурсе. Спасибо будем знать, что и такие конструкции бывают. Про for это тоже понятно все, а вот про x = 5, y=12 не знал кстати спс

Psycho Tiger 24.01.2011 02:12

Wolsh, AS1 style?)
Код AS3:

var g:Graphics=super.graphics;
g.beginFill(..);
g.lineTo(...);


FlashCoder 24.01.2011 02:19

Wolsh, а как вы рисовали сам значок плей?
т.е. с помощью линий и curve - это я понял, а как вы расчитали эти все координаты?
У меня тока час ушло, чтобы разобраться и сделать большой значок, пришлось на листочке все рисовать сначала.
Как раз TanaTiX и спрашивал про эту автоматизацию, наверно.

______________________________
Web-программирование

in4core 24.01.2011 02:27

Я думаю у Wolsh просто очень сильные мат способности )) Ну как минимум он в программировании давно, и написать такую ерундень для него минут 10 работы. Я думаю со временем и вам станет это казаться не сложным моментом. Скажем сейчас вам потребовалось 2 часа для разбора, мне потребуется 30 минут без рисования на листке, а вот Wolsh сделал за 10 минут )) вот и все

Wolsh 24.01.2011 02:28

Тигр, кому как айлайкит. Я написал with и шпарю дальше по теме. А спотыкаться об г. можно, но не хочется.
В чем тут стильность, я не разумею.
FlashCoder, на глаз. Просто приходилось частенько этим заниматься. Никакого волшебства, одни мазоли.

in4core 24.01.2011 02:38

П.с. Оффтоп немного, вот я программированием начал заниматься не так давно и "знаю" только один AS2/AS3 язык. Другие языки я не изучал, ну я не беру в пример XML или HTML это ведь тоже языки не так ли?) И вот у меня появилось немного свободного времени, я подумал, а чебы мне не изучить PHP хотя бы на уровне простейших запросов к мускл и т.д. Дай бог, что в инете много книг, видео уроков и т.д. Подумал я. Скачал один, начал глядеть... Посмотрел 3-4 вступительных урока, а потом начал перематывать... и в этоге 5 часовой курс для меня стал 30 минутным. Почему так? А все просто, синтаксис чуть другой, а работа вся та же самая. Во флеше ( или скажем С) мы создаем переменную через var там же через $ , вместо trace тут echo, print, print_f , массивы строятся по => синтаксису. А все остальное тоже самое как и везде, остается только скачать документацию по языку и смотреть тупо готовые примеры или даже просто константы и вшитые методы. И прекрасно работать с этим. Но к чему я все это виду, когда ты новичек еще и тебе тыкают на документацию - ты говоришь ааа, как так! я ничего не понимаю, как это сложно!!! покажите , объясните. А когда ты уже немного начинаешь шарить, понимаешь - черт пойду читать документацию, нет смысла чего то спрашивать, и чего я раньше так не делал... Все относительно - для Wolsh это сейчас просто на его уровне отработки с этим, для Вас сложно. Но заметьте что он ничего такого экстравагантного не написал, пару строк и все готово)))

Psycho Tiger 24.01.2011 02:45

Цитата:

Тигр, кому как айлайкит. Я написал with и шпарю дальше по теме. А спотыкаться об г. можно, но не хочется.
В чем тут стильность, я не разумею.
Давно-давно помню ругали with. Может быть даже в контексте AVM1. Почему не помню. Но ругали, и ругали сильно.
С тех пор как-то передёргивает. В байткоде на досуге пошарюсь, если что найду - свисну )

FlashCoder 24.01.2011 02:47

Код AS1/AS2:

var btn_play1:Sprite = new Sprite();
btn_play1.graphics.beginFill(backColor);
btn_play1.graphics.drawRoundRect(0, 0, 150, 150, 13);
btn_play1.buttonMode = true;
addChild(btn_play1);
btn_play1.x =100, btn_play1.y = 100;
 
var icon10:Shape = new Shape();
with (icon10.graphics)
{
        beginFill(foreColor), moveTo(0, 10);
        curveTo(3, 0, 15, 7);
        lineTo(80, 50);
        curveTo(90, 60, 80, 70);
        lineTo(15, 123),
        curveTo(3, 130, 0, 120);lineTo(0, 10)
        endFill();
}
btn_play1.addChild(icon10);
icon10.x = 35, icon10.y = 10;

Спасибо всем за помощь.
Особая благодарность Wolsh
Мне этот фоурм нравится)

______________________________
Web-программирование

TanaTiX 24.01.2011 02:55

in4core, дело не в строках, а в том, как лихо были подобраны координаты, FlashCoder меня понял. Wolsh-у отдельные респекты.

Добавлено через 1 минуту
Psycho Tiger, тоже помню была такая тема. Как бы даже не в рекомендациях от адоба... Точно не помню.

in4core 24.01.2011 03:49

про координаты и было сказано причем тут строки

Universe 24.01.2011 13:04

Цитата:

for( i = 0, a = 16; i < 9; i ++, a *= i ) {}
Интересная запись! Единственное что - можно её как то совместить с Strict Mode?

Psycho Tiger 24.01.2011 13:41

А что у Вас не получается?

Universe 24.01.2011 14:12

ну во первых говорит что переменные undefined (т.к. нет var), если писать var - вылазят другие ошибки и не работает даже без strictMode

Wolsh 24.01.2011 14:21

Код AS3:

for (var i:uint = 0, a:uint = 16; i < 9; i ++, a *= i ) 
{
        trace(i, a);
}

Код:

0 16
1 16
2 32
3 96
4 384
5 1920
6 11520
7 80640
8 645120


FlashCoder 24.01.2011 14:45

А как дублировать в Action Script 3 созданные мувиклипы с помощью Sprite?
Чтобы по сто раз одно и тоже не писать, т.к. есть эелементы похожые.


______________________________
Web-программирование

Universe 24.01.2011 14:48

а...понятно, а я просто писал var и для i и для a :) Спасибо!)
P.S. вопрос про спрайты как то не сюда.

FlashCoder 24.01.2011 15:00

Universe, вообще-то это моя тема и обсуждалась тут графика


______________________________
Web-программирование

bav 24.01.2011 15:32

Цитата:

А как дублировать в Action Script 3 созданные мувиклипы с помощью Sprite?
У класса Sprite нет метода дублирующего экземпляры класса MovieClip.
Цитата:

Чтобы по сто раз одно и тоже не писать, т.к. есть эелементы похожые.
Или описывайте элементы в отдельных классах, и далее создавайте их экземпляры, или создавайте методы, которые будут рисовать и возвращать необходимые вам элементы.

P.S. «похожые» – в каком классе проходят это правило?

FlashCoder 24.01.2011 20:49

Вот, например

Код AS1/AS2:

var backColor:uint = 0x000000;
var foreColor:uint = 0xFFFFFF;
 
var btn_play:Sprite = new Sprite();
btn_play.graphics.beginFill(backColor);
btn_play.graphics.drawRoundRect(0, 0, 35, 35, 8);
btn_play.buttonMode = true;
addChild(btn_play);
 
var bg_panel:Sprite = new Sprite();
bg_panel.graphics.beginFill(backColor);
bg_panel.graphics.drawRoundRect(0, 0, 400, 25, 8);
addChild(bg_panel);
bg_panel.x =40, bg_panel.y = 10;
 
 
var icon1:Shape = new Shape();
with (icon1.graphics)
{
        beginFill(foreColor), moveTo(0, 1);
        lineTo(00, 19)curveTo(0.5, 21, 3, 20);
        lineTo(18, 12), curveTo(20, 10, 18, 8);
        lineTo(03, 00), curveTo(0.5, -1, 0, 1);
}
btn_play.addChild(icon1);
icon1.x = 8, icon1.y = 7;
 
var btn_pause:Sprite = new Sprite();
btn_pause.graphics.beginFill(backColor);
btn_pause.graphics.drawRoundRect(0, 0, 35, 35, 8);
btn_pause.buttonMode = true;
addChild(btn_pause);
 
var icon2:Shape = new Shape();
icon2.graphics.beginFill(foreColor);
icon2.graphics.drawRoundRect(0, 0, 4, 20, 3);
btn_pause.addChild(icon2);
icon2.x = 11, icon2.y = 7;
 
var icon3:Shape = new Shape();
icon3.graphics.beginFill(foreColor);
icon3.graphics.drawRoundRect(0, 0, 4, 20, 3);
btn_pause.addChild(icon3);
icon3.x = 19, icon3.y = 7;

5 строчек для рисования фона для кнопки play и pause полностью одинаковые.
Неудобно будет потом код менять. Думаю, как-то класс написать для интерфейса. Но классы как создавать в Flash я еще не знаю. Как посоветуете красиво оформлять код такой?


______________________________
Web-программирование

Wolsh 24.01.2011 21:04

Цитата:

Но классы как создавать в Flash я еще не знаю.
Вот лучше с этого и начните, не засоряйте сознание кодом в кадрах. AS3 пишется в классах и отлично управляется концепциями ООП.
Естественно, все GUI-элементы должны быть отдельными классами - Button, ButtonIcon, SeekBar, VolumeBar.
Читайте Мука. Лучше пусть теория идет впереди. Не учите себя делать неправильно.


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

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