Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   метод класса setRandomPosition(). (http://www.flasher.ru/forum/showthread.php?t=193973)

Tina 05.02.2013 17:44

метод класса setRandomPosition().
 
Подскажите пожалуйста что это такое и как его использовать?

iflamberg 05.02.2013 17:53

Мы что тут телепаты? Это не из actionscript 3 API. Судя по названию вашей темы - это функция класса. Тогда это вам лучше знать, что это за класс и как его использовать.

Hauts 05.02.2013 17:55

Делаю ставку: это метод для установки произвольного положения чего-то :)

Tina 05.02.2013 18:32

Ну в общем то да. Просто я вообще то думала что это из AS3. Но теперь уже поняла, что это из моего класса будет. Тогда вопрос такой. Как создать метод класса? Просто было задание установить рисунок на случайной позиции на сцене. Я это сделала, а теперь нужно сделать тоже самое методом класса.

dimarik 05.02.2013 20:24

Резюме заполняете?

Tina 05.02.2013 21:09

да нет просто AS3 учу. Я только начинаю. И сразу извиняюсь, если кому-то вопросы покажутся тупыми.

dimarik 05.02.2013 22:35

В некотором виде так выглядит метод класса
Код AS3:

package {
    class Foo {
        static function setRandomPosition():void {
            // method body
        }
    }
}


caseyryan 05.02.2013 22:55

Код AS3:

package {
        public class RandomPositioner extends Sprite {
                  private var _image:Bitmap = new Bitmap(new BitmapData(100, 100, 0xff0000, false));
                  public function RandomPositioner() {
                          if (stage) init();
                          else addEventListener(Event.ADDED_TO_STAGE, init);
                  }
                  private function init(e:Event = null):void {
                          setRandomPosition();
                  }
                  private function setRandomPosition():void {
                          if (stage == null) return;
                          _image.x = stage.stageWidth * Math.random();
                          _image.y = stage.stageHeight * Math.random();
                  }
        }
}

что-то типа того

Tina 05.02.2013 23:17

Я наверное лучше выложу код. Может по ходу кода подскажите как это лучше сделать.
Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
        import new_packege.Ball;
 
        public class Main extends Sprite
        {
                public var ball1:Ball;
                public var ball2:Ball;
                public function Main()
                {
                        ball1 = new Ball();
                        ball1.x = Math.random() * (stage.stageWidth - ball1.width);
                        ball1.y = Math.random() * (stage.stageHeight - ball1.height);
                        addChild(ball1);
                        ball2 = new Ball();
                        ball2.x = Math.random() * (stage.stageWidth - ball2.width);
                        ball2.y = Math.random() * (stage.stageHeight - ball2.height);
                        addChild(ball2);
                        addEventListener(Event.ENTER_FRAME, onLoop1);
                        addEventListener(Event.ENTER_FRAME, onLoop2);
                }
                private function onLoop1(evt:Event):void
                {
                        ball1.move(ball1);
                }
                private function onLoop2(evt:Event):void
                {
                        ball2.move(ball2);
                }
        }
}

А это класс который я создала, чтоб после из него создать шарики.
Код AS3:

package new_packege 
{
        import flash.display.Sprite;
 
        public class Ball extends Sprite
        {
                public var speed:int = 10;
                public function Ball()
                {
                        graphics.beginFill(0x0000FF);
                        graphics.drawCircle(50, 50, 50);
                }
                public function move(bl:Ball):void
                {
                        bl.x += speed;
                        if (bl.x >= stage.stageWidth - bl.width || bl.x < 0)
                        {
                                speed *= -1;
                        }
                }
        }
}

Вот так это выглядит сейчас. А мне нужно чтобы шарики добавлялись на сцену методом класса. Это я так понимаю из Ball делать нужно. Подскажите как пожалуйста.

caseyryan 06.02.2013 07:10

Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
        import new_packege.Ball;
 
        public class Main extends Sprite
        {
                public var ball1:Ball;
                public var ball2:Ball;
                public function Main()
                {
                        ball1 = new Ball();
                        ball2 = new Ball();       
                                setRandomPosition();
                }
                      public function setRandomPosition():void {
                                ball1.x = Math.random() * (stage.stageWidth - ball1.width);
                        ball1.y = Math.random() * (stage.stageHeight - ball1.height);
                        addChild(ball1);
                                ball2.x = Math.random() * (stage.stageWidth - ball2.width);
                        ball2.y = Math.random() * (stage.stageHeight - ball2.height);
                        addChild(ball2);
                                  if (!hasEventListener(Event.ENTER_FRAME)) {
                                          addEventListener(Event.ENTER_FRAME, onLoop1); // второй слушатель enterFrame тут не нужен
                                  }
                      }
 
                private function onLoop1(evt:Event):void
                {
                        ball1.move(); // не нужно ему передавать ссылку на себя, убрал ее отсюда, так как она у него и так есть
                                  ball2.move();
                }
 
        }
}

Код AS3:

package new_packege 
{
        import flash.display.Sprite;
 
        public class Ball extends Sprite
        {
                public var speed:int = 10;
                public function Ball()
                {
                        graphics.beginFill(0x0000FF);
                        graphics.drawCircle(50, 50, 50);
                }
                public function move():void
                {
                        this.x += speed;
                        if (this.x >= stage.stageWidth - this.width || this.x < 0)
                        {
                                speed *= -1;
                        }
                }
        }
}


Hauts 06.02.2013 11:54

Можно попридираться, кстати, но на пользу.

Не хватает graphics.endFill() в конструкторе Ball.

Почему-то "new_packege" (с ошибкой).

Зачем "this" в move (хотя это кому как, конечно)?

Зачем подписываться на ENTER_FRAME в методе setRandomPosition? Очевидно же, что метод подвинет в разные места шарики, но вот на события подписываться, думаю, лучше в конструкторе.

Код AS3:

if (!hasEventListener(Event.ENTER_FRAME)) {
addEventListener(Event.ENTER_FRAME, onLoop1); // второй слушатель enterFrame тут не нужен
}

Да и вообще, по-хорошему, лучше уж массив создать с ссылками на шарики и метод "createNewBall", который создаст шарик, подвинет его и запишет ссылку в массив.

Tina 06.02.2013 13:50

Спасибо за падсказку. Если не трудно можно немножко подробнее что делает эта строчка.
Код AS3:

 if (!hasEventListener(Event.ENTER_FRAME)) {
addEventListener(Event.ENTER_FRAME, onLoop1); // второй слушатель enterFrame тут не нужен
 }

Добавлено через 3 минуты
Тут тоже вопрос. Что вообще такое это this и откуда взялось?
Код AS3:

{
                        this.x += speed;
                        if (this.x >= stage.stageWidth - this.width || this.x < 0)
                        {
                                speed *= -1;
                        }
                }


caseyryan 06.02.2013 16:31

Цитата:

Если не трудно можно немножко подробнее что делает эта строчка.
Проверяет нет ли уже такого слушателя у объекта, если его нет, то добавляет, если есть, нет. Ну нужно ему куча энтерфреймов, это нагружает систему.

Цитата:

Тут тоже вопрос. Что вообще такое это this и откуда взялось?
this - это ссылка объекта на самого себя. В данном контексте this можно вообще убрать, это не обязательно.
Вообще, без this можно обойтись почти всегда. Лично я знаю только один случай, когда это реально необходимо

Tina 06.02.2013 20:49

caseyryan, спасибо.


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

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