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

xintrea 30.09.2010 21:28

Почему не показывается простая кнопка?
 
Здравствуйте!


Целый день разбираюсь, как программно создавать кнопки. Уже устал, кнопки так и не увидел. Упростил код до безобразия:

Код AS3:

package {
  import flash.display.Sprite;
  import flash.text.TextField;
  import mx.controls.Button;
 
  public class Main extends Sprite {
 
  public function Main()
  {
  var display_txt:TextField = new TextField();
  display_txt.text = "This is text";
  addChild(display_txt);
 
  var pButton:Button = new Button();
  pButton.label="This is button";
  addChild(pButton);
  }
 }
}

Компилирую его через mxmlc, ошибок нет. Ролик показывает только текст, а кнопки не видно. Что я сделал неправильно?

AlesNormales 30.09.2010 21:42

Никогда не пробовал этого делать, но если расширять mx.containers.Canvas вместо спрайта?

xintrea 30.09.2010 21:56

Цитата:

Сообщение от AlesNormales (Сообщение 939941)
Никогда не пробовал этого делать, но если расширять mx.containers.Canvas вместо спрайта?

Попробовал:

Код AS3:

import mx.containers.Canvas;
...
public class Main extends Canvas {
...
}

Тогда и текст и кнопка не показывается, и лезет ошибка во время выполнения:

Код:

Произошла ошибка ActionScript:
TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать flash.text::TextField@b430d061 в mx.core.IUIComponent.
        at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()
        at mx.core::Container/addChildAt()
        at mx.core::Container/addChild()
        at Main()


AlesNormales 30.09.2010 22:03

Без текстфилда должно работать. А если оставить спрайт, то SimpleButton по идее прокатит

SilverToad 30.09.2010 22:04

Товарищи, дело в том, что Flex компоненты нативно не добавляются на AS спрайты, а flash компоненты не добавляются на flex компоненты, так как не поддерживают IUIInterface, на сколько я помню.

AlesNormales 30.09.2010 22:05

ну так поэтому с канвасом будет работать кнопка из контролов, и не будет текстфилд, а со спрайтом будет работать текстфилд и простая кнопка. как-то так

xintrea 30.09.2010 22:19

Так как же показать и текстфиелд, и кнопку??? Дикость какая-то.

AlesNormales 30.09.2010 22:21

ну обычную кнопку покажите с текстфилдом на спрайте

SilverToad 30.09.2010 22:23

или на Canvas: Button и Label +))

xintrea 30.09.2010 23:05

Цитата:

Сообщение от AlesNormales (Сообщение 939952)
ну обычную кнопку покажите с текстфилдом на спрайте

Обычная кнопка - это какой класс? Я в этих кнопках уже запутался. Если "обычная кнопка" - это SimpleButton, то у нее почему-то в документации нет свойства Label или Text, ну в общем, неясно как надпись на этой кнопке задавать.

PS: И еще непонятно - есть класс Button в spark.components и в mx.controls. Как Flex определяет, какой класс имеется в виду? По тому, что было импортировано через import?

AlesNormales 30.09.2010 23:07

flash.display.SimpleButton
или из мувиклипа кнопку делайте.

xintrea 30.09.2010 23:27

Цитата:

Сообщение от AlesNormales (Сообщение 939962)
flash.display.SimpleButton
или из мувиклипа кнопку делайте.

У SimpleButton нет свойства Label. Как задать надпись на такой кнопке?

Bgg 30.09.2010 23:31

Цитата:

Сообщение от xintrea (Сообщение 939964)
У SimpleButton нет свойства Label. Как задать надпись на такой кнопке?

Руками во Flash IDE.

xintrea 30.09.2010 23:38

Цитата:

Сообщение от SilverToad (Сообщение 939953)
или на Canvas: Button и Label +))

Хорошо, вот код:

Код AS3:

package {
  import mx.containers.Canvas;
  import mx.controls.Button;
  import mx.controls.Label;
 
  public class Main extends Canvas {
 
  public function Main()
  {
  var display_txt:Label = new Label();
  display_txt.text = "This is text";
  addChild(display_txt);
 
  var pButton:Button = new Button();
  pButton.label="This is button";
  addChild(pButton);
  }
 }
}

Компилируется без ошибок, но при запуске выдает:

Код:

Произошла ошибка ActionScript:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
        at mx.styles::StyleManager$/getStyleManager()
        at mx.styles::StyleProtoChain$/getStyleManager()
        at mx.styles::StyleProtoChain$/initProtoChain()
        at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::initProtoChain()
        at mx.core::UIComponent/regenerateStyleCache()
        at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::addingChild()
        at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()
        at mx.core::Container/addChildAt()
        at mx.core::Container/addChild()
        at Main()

Что эта гадость еще от меня хочет?

deamoK 30.09.2010 23:41

на худой конец можно сделать так:

Код AS1/AS2:

package  
{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.text.TextField;
 
        public class SimpleDrag extends Sprite
        {
                private var button:Sprite;
                private var label:TextField;
 
                public function SimpleDrag()
                {
                        button = new Sprite();
                        label = new TextField()
                        label.text = "Label";
                        label.selectable = false;
                        label.x = 30;
                        label.y = 15
                        button.graphics.lineStyle(1)
                        button.graphics.beginFill(0xCCCCCC);
                        button.graphics.drawRoundRect(0, 0, 100,  50, 15);
                        button.graphics.endFill()
                        button.addChild(label)
                        stage.addChild(button);
                        button.x = button.y = 100;
                }
 
        }
 
}

я, лично, юзаю компоненты отсюда minimalcomps.com , очень удобные штучки

xintrea 30.09.2010 23:42

Цитата:

Сообщение от Bgg (Сообщение 939965)
У SimpleButton нет свойства Label. Как задать надпись на такой кнопке?
Руками во Flash IDE.

То есть, во Flash IDE доступно свойство Label, а в чистом AS3 недоступно? Тогда я вообще не понимаю, как Flex устроен.

И да, я под линухом компилирую через mxmlc, о чем написал в первом посте. Flash IDE тут нет как понятия.

Добавлено через 3 минуты
Цитата:

Сообщение от deamoK (Сообщение 939969)
на худой конец можно сделать так:

Не, не, не надо на худой конец.

Хочу узнать простую вещь - как сделать "надпись" и "кнопку с текстом". И показать их на экране. Неужели во Flex нет таких базовых компонент???

AlesNormales 30.09.2010 23:48

с SimpleButton проще разбираться. Никакого лейбла и текста у нее действительно нет. на то она и Simple. Расширьте ее класс, кладите сверху на нее текстфилд, вот вам и текст.

вот тут обсуждают
http://www.kirupa.com/forum/showthread.php?t=317239
и здесь пример есть
http://livedocs.adobe.com/flash/9.0/...xamplesSummary

Bgg 01.10.2010 00:00

Цитата:

Сообщение от xintrea (Сообщение 939970)
То есть, во Flash IDE доступно свойство Label, а в чистом AS3 недоступно? Тогда я вообще не понимаю, как Flex устроен.

И да, я под линухом компилирую через mxmlc, о чем написал в первом посте. Flash IDE тут нет как понятия.

Вас линукс до добра не доведет))

Свойства Label нет у SimpleButton нигде, о чем и говорится в документации.

Я бы на вашем месте скачал FlashBuilder и посмотрел как формируется mxml документ, в котором содержится разметка и свойства(Label, ага) различных компонентов.

xintrea 01.10.2010 00:29

Цитата:

Сообщение от deamoK (Сообщение 939969)
я, лично, юзаю компоненты отсюда minimalcomps.com , очень удобные штучки

Скачал, но так и не догнал, как их установить в Flex4 SDK. Может, вы знаете?

deamoK 01.10.2010 00:39

Цитата:

Сообщение от xintrea (Сообщение 939987)
Скачал, но так и не догнал, как их установить в Flex4 SDK. Может, вы знаете?

SDK? Может быть вы имели ввиду FlashBuilder4, ну или Flex4
Во флексе есть всевозможные компоненты: и надписи, и кнопки, и перекнопки итд

Я юзаю FlashDevelop, те чистый as3 код

Добавлено через 6 минут
ааа, все-все, увидел что вы под линуксом))
Нужна просто кнопка, тогда мой код постом выше НЕ худой конец, а норм решение)))

iillyyaa 01.10.2010 00:46

у меня вообще ничего не пашет с бутонс :) но в доке чё то написано что у кнопки есть свойство TextField
значит должно работать что то типа такого

Код AS3:

button.TextField.text = 'труляля';


AlesNormales 01.10.2010 01:10

в каком это доке написано?

xintrea 01.10.2010 02:10

Цитата:

Сообщение от deamoK (Сообщение 939991)
SDK? Может быть вы имели ввиду FlashBuilder4, ну или Flex4

Именно Flex4 SDK http://opensource.adobe.com/wiki/dis...exsdk/Flex+SDK.


Цитата:

Сообщение от deamoK (Сообщение 939991)
Во флексе есть всевозможные компоненты: и надписи, и кнопки, и перекнопки итд

Тоже так раньше думал. Может быть, поиск по хелпу так криво работает что не показывает этих компонент. Но найти нормальную кнопку, чтоб и Label был, и чтоб ее на Sprite положить - не могу.


Цитата:

Сообщение от deamoK (Сообщение 939991)
Я юзаю FlashDevelop, те чистый as3 код

Аналогично, чистый AS3 компилирую с помощью mxmlc.

iillyyaa 01.10.2010 04:48

AlesNormales, только textField с маленькой буквы :)

http://help.adobe.com/ru_RU/AS3LCR/F...html#textField

но у меня вообще дальше первой строчки не идёт, по этому проверить не могу :)

пытаюсь:
Код AS3:

import mx.controls.Button;

1172: Не удалось найти определение mx.controls:Button.

SilverToad 01.10.2010 09:40

Обычная кнопка, это с использование класса SimpleButton, у него нет текстового поля, за то есть поля под разные состояния кнопки (upState, overState, downState, hitTestState), которые ты можешь определить сам (по дефолту они пустые) например так:
Код AS3:

var button:SimpleButton = new SimpleButton(getButtonSprite(50, 50, 0x00FFFF),
                getButtonSprite(50, 50, 0x00FF00), getButtonSprite(50, 50, 0xFFFFFF),
                getButtonSprite(50, 50, 0xFF00FF));
        this.addChild(button);
 
        function getButtonSprite(buttonWidth:Number, buttonHeight:Number, color:uint = 0x00FF00):Sprite
        {
            var buttonSprite:Sprite = new Sprite();
            buttonSprite.graphics.beginFill(color);
            buttonSprite.graphics.drawRect(0, 0, buttonWidth, buttonHeight);
            buttonSprite.graphics.endFill();
            return buttonSprite;
        }

Компилятор использует в пределах класса то, что было import, если используется два класса с одинаковым названием в одном месте, то нужно уточнять пакет конкретного класса, например:
Код AS3:

var class1:lib.some_clases.SomeClass = new lib.some_clases.SomeClass();
var class2:SomeClass = new SomeClass();


alatar 01.10.2010 17:48

Флексовые компоненты не работают в проектах на чистом as3, т.е. в не флекс проектах.
Цитата:

Обычная кнопка, это с использование класса SimpleButton
Это извращение, а не кнопка. Анимированные переходы между состояниями, с такой кнопкой, сделать не получится.

xintrea 01.10.2010 19:35

Цитата:

Сообщение от alatar (Сообщение 940175)
Флексовые компоненты не работают в проектах на чистом as3, т.е. в не флекс проектах.

Вот я и не могу в этом разобраться. Где лежит та грань, что вот это - чистый AS3 проект, а вот это - Flex проект. Чем они отличаются?

alatar 01.10.2010 19:52

Цитата:

Где лежит та грань
Грань лежит в ISystemManager и Application.

i.o. 01.10.2010 19:58

Цитата:

Флексовые компоненты не работают в проектах на чистом as3, т.е. в не флекс проектах.
Неправда.
Можно заэмбдить или подгрузить флэшку с флексовыми компонентами и, хоть и не без гемора, делать все, что нужно.

alatar 01.10.2010 21:36

Ключевое слово здесь – гемор.

SilverToad 02.10.2010 11:24

Цитата:

Флексовые компоненты не работают в проектах на чистом as3, т.е. в не флекс проектах.
Цитата:
Обычная кнопка, это с использование класса SimpleButton
Это извращение, а не кнопка. Анимированные переходы между состояниями, с такой кнопкой, сделать не получится.
Ну как сказать извращение, просто для своих целей.
Далеко не везде нужны анимированные переходы.

А вообще на мой взгляд, тянуть половину Flex фрэймворка, ради одной кнопки нет смысла. Проще свою написать +)

Alex Lexcuk 02.10.2010 13:02

Вложений: 1
а вообще-то с flash cs3 компоненты проще простого засунуть и откомпилить в линухе, мой линух убунту умер в первый же день, нервишки уже не те...
батник под винду
[code]
D:\flex_sdk_3.4\bin\mxmlc.exe Doc.as -include-libraries all-component.swc
[/as3]
под линуху переделаете, там пути к компилятору перебить надо и вот как подвиндовс запускал его
Код:

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Lexcuk>D:\FLEX\asComponent\sc3Componenta\doc.bat

C:\Documents and Settings\Lexcuk>D:\flex_sdk_3.4\bin\mxmlc.exe Doc.as -include-l
ibraries all-component.swc
Loading configuration file D:\flex_sdk_3.4\frameworks\flex-config.xml
command line: Error: unable to open 'all-component.swc'

Use 'mxmlc -help' for information about using the command line.

C:\Documents and Settings\Lexcuk>cd d:
D:\

C:\Documents and Settings\Lexcuk>d
"d" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Lexcuk>d:

D:\>cdD:\FLEX\asComponent\sc3Componenta

D:\>cd D:\FLEX\asComponent\sc3Componenta

D:\FLEX\asComponent\sc3Componenta>D:\FLEX\asComponent\sc3Componenta\doc.bat

D:\FLEX\asComponent\sc3Componenta>D:\flex_sdk_3.4\bin\mxmlc.exe Doc.as -include-
libraries all-component.swc
Loading configuration file D:\flex_sdk_3.4\frameworks\flex-config.xml
D:\FLEX\asComponent\sc3Componenta\Doc.swf (82544 bytes)

D:\FLEX\asComponent\sc3Componenta>

ка видно запустилось и скомпилилось вот что
Код AS3:

package  
{
        import fl.controls.*;
        import flash.display.*;
        /**
        * ...
        * @author Alex Lexcuk
        */

        public class Doc extends Sprite
        {
 
                public function Doc()
                {
                        var btn:Button;
                        addChild(btn = new Button());
                        btn.label = 'Прикол';
 
                        var aSlider:Slider = new Slider();
                        aSlider.width = 200;
                        aSlider.snapInterval = 10;
                        aSlider.tickInterval = 10;
                        aSlider.maximum = 100;
                        aSlider.value = 100;
                        aSlider.move(120, 330);
                        addChild(aSlider)
                }
 
        }
 
}

Flash CS3 тоже теперь нету, однако файл с компонетами остался, там табле, радио баттоноы скроллер комбо, ивенты их, (все кроме видео компонетов и пр.)

а, кстати флеш cs3 запускался под вином, жутко тормозил, но работал, хватить что-бы скомпилить swc файл с компонентами.

alatar 02.10.2010 15:28

Цитата:

А вообще на мой взгляд, тянуть половину Flex фрэймворка, ради одной кнопки нет смысла. Проще свою написать +)
Полностью с вами согласен.


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

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