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

ganjubazz 01.12.2010 14:06

Нужна помощь в "размножении" классов
 
Всем привет! Помогите новичку в простеньком.
Например есть такой код:
Код AS3:

 
package 
{
        import flash.display.Sprite;
 
 
        public class Shar extends Sprite
        {
                public var shar:Sprite = new Sprite();
                public function Shar()
                {
                        shar.graphics.beginFill (0x000000);
                        shar.graphics.drawCircle (0, 0, 50);
                        shar.graphics.endFill();
                        addChild(shar);
 
 
                }
 
        }
 
}

В основном классе необходимо изпользовать несколько подобных шаров:,
Код AS3:

 
package
{
        import flash.display.Sprite;
        import flash.events.Event;
 
 
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        var ar:Array = new Array();
                        for (var i:int = 0; i <10 ; i++)
                        {
 
                        var shar:Shar = new Shar();       
                        shar.x = i * 90;
                        shar.y = 300;
                        addChild(shar);
                        ar.push(shar);
                        }
                        trace (ar);
 
                        ar.forEach(move);
                        function move():void
                        {
                                shar.y = 50;
                        }
 
                }
 
        }
 
}

Внимание вопрос: Как в дальнейшем управлять всеми шарами? получается управлять только одним (последним). Что я делаю неправильно? Как я понимаю привязка переменной к классу остается у последней.

goodguy 01.12.2010 14:09

Убрать этот код:
Код AS3:

ar.forEach(move);
function move():void
{
    shar.y = 50;
}

И написать отельную функцию, которая будет по ENTER_FRAME изменять положения шаров в массиве, допустим циклом.

medvedya2 01.12.2010 14:15

сделай оглавление ar в классе а не в конструкторе.
ar[индекс] сылка на твой шар
Код AS3:

ar[0].x=100;
ar[0].y=100;
или
var myShar:Shar=ar[0];
myShar.x=100;
myShar.y=100;

это неверная конструкция:
Код AS3:

ar.forEach(move);
function move():void
{
    shar.y = 50;
}

Добавлено через 4 минуты
лучше так:
Код AS3:

for each(var myShar:Shar in ar)
{
    myShar.y=50;
}


ganjubazz 01.12.2010 14:33

Цитата:

Сообщение от medvedya2 (Сообщение 953916)
сделай оглавление ar в классе а не в конструкторе.
ar[индекс] сылка на твой шар
Код AS3:

ar[0].x=100;
ar[0].y=100;
или
var myShar:Shar=ar[0];
myShar.x=100;
myShar.y=100;

это неверная конструкция:
Код AS3:

ar.forEach(move);
function move():void
{
    shar.y = 50;
}

Добавлено через 4 минуты
лучше так:
Код AS3:

for each(var myShar:Shar in ar)
{
    myShar.y=50;
}


в Первом случае получается, в третьем нет, все равно срабатывает один послдений шар.
Хочетьа ко всем шарам привязать одну функцию. Не на статичных шарах конечно это покажу, но например выключить все таймеры во всех классах.

medvedya2 01.12.2010 15:21

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
 
 
        public class Main extends Sprite
        {
 
                private static var ar:Array = new Array();
                public function Main():void
                {
                        for (var i:int = 0; i <10 ; i++)
                        {
 
                        var shar:Shar = new Shar();       
                        shar.x = i * 90;
                        shar.y = 300;
                        addChild(shar);
                        ar.push(shar);
                        }
                        trace (ar);
                        moveShar();
 
                }
                private function moveShar():void
                {
                        for each(var myShar:Shar in ar)
                        {
                                    myShar.y=50;
                        }
 
                }
 
        }
 
}

Но я бы сделал так:
Код AS3:

package  
{
        import flash.display.Sprite;
 
 
        public class Shar extends Sprite
        {
                public var shar:Sprite = new Sprite();
                public static var ar:Array=[];
                public function Shar()
                {
                        shar.graphics.beginFill (0x000000);
                        shar.graphics.drawCircle (0, 0, 50);
                        shar.graphics.endFill();
                        addChild(shar);
                        ar.push(this);
 
 
                }
 
 
                public static function  moveAllShar():void
                {
                        for each(var myShar:Shar in ar)
                        {
                                    myShar.y=50;
                        }               
                }
 
        }
 
}

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
 
 
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        for (var i:int = 0; i <10 ; i++)
                        {
 
                        var shar:Shar = new Shar();       
                        shar.x = i * 90;
                        shar.y = 300;
                        addChild(shar);
                        }
                        trace (ar);
                        Shar.moveAllShar();
 
                }
 
        }
 
}


ganjubazz 01.12.2010 15:36

Ага, спасибо большое вроде начинает получаться.


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

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