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

ramshteks 30.08.2008 20:17

Код:

private function init():void
                {                               
                        songname = new TextField();
                        addChild(songname);
                        songname.autoSize = TextFieldAutoSize.LEFT;
                        songname.border=true;
                        songname.htmlText = "песня";

                        songButton = new MovieClip();
                        songButton.graphics.drawRect(songname.x, songname.y, songname.width, songname.height);
                        songButton.graphics.endFill();

                        songButton.addChild(songname);
                        songname.mouseEnabled = false;
                        songButton.buttonMode = true;                       
                                addChild(songButton)
               
                };


sssssss 30.08.2008 20:23

ramshteks, спасибо! Теперь всё понятно, буду действовать дальше)

sssssss 01.09.2008 17:12

Вот на таком простом примере не могу получить номер кнопки на которую нажал, так чтобы эта переменная была доступна в классе Main

Код:

public class Main extends MovieClip
        {
                public var playList:Array;

                public function Main()
                {
                        init();       
                };

                private function init():void
                {

                playList = new Array();
                playList.push("A", "B", "C", "D");

                for (var i:int = 0; i < playList.length; i++)
                {
                        var playlistButton:MyButton = new MyButton(i);                                       
                        playlistButton.x = 50;
                        playlistButton.y = i*25;
                        playlistButton.songname.text = "hello"+i;
                        playlistButton.addEventListener(MouseEvent.CLICK, handleButtonClick);
                        addChild(playlistButton);
 
                };

};

private function handleButtonClick(e:MouseEvent):void
                {
                        trace(playlistButton.buttonNumber);
                       
                };


};

Код:



public class MyButton extends MovieClip
        {
                public var songButton:MovieClip;
                public var songname:TextField;
                public var buttonNumber:int;

                public function MyButton()
                {       
                        this.buttonNumber = i;
                        init();
                };

private function init():void
                {                               
                        songname = new TextField();                       
                        songButton = new MovieClip();
                        songButton.graphics.drawRect(songname.x, songname.y, songname.width, songname.height);
                        songButton.graphics.endFill();

                        songButton.addChild(songname);
                        songname.mouseEnabled = false;
                        songButton.buttonMode = true;                       
                        addChild(songButton)
               
                };

все компилируется, но при клике
Код:

1119: Access of possibly undefined property buttonNumber through a reference with static type classes:MyButton.
прочитал, что при создании экземпляров лучше заносить каждую кнопку в массив, но получается чтобы к ней обратится надо знать номер элемента массива, что соответствует номеру кнопки, который я хочу найти.

ramshteks 01.09.2008 18:17

во первых послушай старших и сделай массив!
во вторых странно другой почему компилятор не выдает ошибки про получение параметра конструктором, тк как
Код:

var playlistButton:MyButton = new MyButton(i);
ты присваиваешь номер
Код:

public function MyButton(ПУСТО О_о)
скажи честно у тя кнопочки то появляются?

sssssss 01.09.2008 18:29

ramshteks
Появляются) Я просто сам не знаю откуда я скопировал так криво. :rolleyes:
Код:

public function MyButton(i:int)

На самом деле подумал, почитал, узнал о чудесной штуке e.target и написал через массив, все работает, буду делать дальше)

Код:

public function createButtons()
{       
buttonArray = new Array();
for (var i:int = 0; i < playList.length; i++)
                {
                        var playlistButton:MyButton = new MyButton(i);                       
                        buttonArray.push(playlistButton);                       
                        buttonArray[i].x = 50;
                        buttonArray[i].y = i*25;                       
                        buttonArray[i].songname.text = "hello"+i;
                        buttonArray[i].addEventListener(MouseEvent.CLICK, handleButtonClick);
                        addChild(buttonArray[i]);
                };               
};

private function handleButtonClick(e:MouseEvent):void
                {
                        trace(e.target.buttonNumber);
                       
                };


ramshteks 01.09.2008 18:37

Код:

var playlistButton:MyButton = new MyButton(i);
замени на
Код:

buttonArray.push(new MyButton(i));
не зачем создавать бесполезную локальную переменную)

а
Код:

buttonArray[i].x = 50;
                        buttonArray[i].y = i*25;                       
                        buttonArray[i].songname.text = "hello"+i;

вполне можно запихнуть в конструктор майбаттона.

Visual 09.09.2008 17:26

Апну эту темку чтоб не создавать новую.
Код:

package {

        import flash.display.MovieClip;
        import flash.events.*;
        import flash.geom.Rectangle;
        import flash.text.TextField;
        import flash.utils.getDefinitionByName;

        public class MyButton extends MovieClip {
                public var songButton:MovieClip;
                public var songname:TextField;
                public var buttonNumber:int;

                public function MyButton(i:int) {
                       
                        this.buttonNumber = i;
                        init();
                }

                private function init():void {
                        songname = new TextField();
                        songButton = new MovieClip();
                        songButton.graphics.drawRect(songname.x, songname.y, songname.width, songname.height);
                        songButton.graphics.endFill();

                        songButton.addChild(songname);
                        songname.mouseEnabled = false;
                        songButton.buttonMode = true;
                        addChild(songButton);
                }
        }
}

и
Код:

package {

        import flash.display.MovieClip;
        import flash.events.*;
        import MyButton;

        public class Main extends MovieClip {

                public function Main() {
                        createButtons();
                }
                public function createButtons() {

                        var buttonArray:Array = new Array();

                        var i:int = 0;
                       
                        for (i=0; i < 40; i++) {
                                var playlistButton:MyButton = new MyButton(i);
                                buttonArray.push(playlistButton);
                                buttonArray[i].x = 50;
                                buttonArray[i].y = i*25;
                                buttonArray[i].songname.text = "hello"+i;
                                buttonArray[i].addEventListener(MouseEvent.CLICK, handleButtonClick);
                                addChild(buttonArray[i]);
                        }
                }

                private function handleButtonClick(e:MouseEvent):void {
                        trace(e.target);

                }
        }
}

Трейс выводит [object MovieClip], а как получить доступ к обьекту MyButton и его переменным?

mre 09.09.2008 17:34

Код:

buttonArray[i].mouseChildren = false;


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

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