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

XMON 21.01.2013 15:15

проблемы по добавлению рандомных символов на сцену.
 
вот код:

Код AS3:

var BOXES:Array = [new box1(), new box2(), new box3(), new box4()]
var BOXES_ITEM:MovieClip
 
while (MAX_BOXES_ITEMS < 5)
{
  var MAX_BOXES_ITEMS:int
  BOXES_ITEM = BOXES[Math.floor( Math.random() * BOXES.length )]
  with(addChild(BOXES_ITEM)){x = (MAX_BOXES_ITEMS*10)}
  MAX_BOXES_ITEMS++
  trace (MAX_BOXES_ITEMS)
}

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

КорДум 21.01.2013 15:18

Ой какой наиужасающий кошмарный код с with, капсом и без ";". Немедленно переписать!

А по теме: вынесите объявление переменной MAX_BOXES_ITEMS из цикла.
Дальше я не разбирался.

XMON 21.01.2013 15:24

ранее объявлял переменную вне цикла, ради эксперимента решил объявить её в цикле, был такой же результат, решил оставить.
а в каком именно месте код ужасен? если в этом:
Код AS3:

with(addChild(BOXES_ITEM)){x = (MAX_BOXES_ITEMS*10)}

то так мне посоветовали здесь: http://www.flasher.ru/forum/showthread.php?t=190093

КорДум 21.01.2013 15:25

А вы вообще не понимаете, как работает ваш код?

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

var boxes:Array/*of Class*/ = [box1, box2, box3, box4];
 
for (var i:uint = 0; i < 4; i++) {
  var box:MovieClip = new (boxes[int(Math.random() * boxes.length)] as Class)() as MovieClip;
  box.x = i * 10;
  addChild(box);
}

Переписал так, как понял задачу.

XMON 21.01.2013 15:30

Код AS3:

var BOXES:Array = [new box1(), new box2(), new box3(), new box4()]
var BOXES_ITEM:MovieClip
var MAX_BOXES_ITEMS:int
 
while (MAX_BOXES_ITEMS < 5) // создается цикл который будет выполнятся пока переменная MAX_BOXES_ITEMS  меньше 5
{
  BOXES_ITEM = BOXES[Math.floor( Math.random() * BOXES.length )] // выберается рандомный символ из BOXES
  with(addChild(BOXES_ITEM)){x = (MAX_BOXES_ITEMS*10)}// помещается выбранный рандомный символ в координаты равные MAX_BOXES_ITEMS умноженное на 10
  MAX_BOXES_ITEMS++//MAX_BOXES_ITEMS увеличивается
  trace (MAX_BOXES_ITEMS)
}

вот как я вижу свой код

КорДум 21.01.2013 15:31

Цитата:

то так мне посоветовали здесь
Там не было совета. Там была синтаксическая правка, не более. Далее Хаутс спросил, зачем вам это.

XMON 21.01.2013 15:31

большое вам спасибо!)

КорДум 21.01.2013 15:33

Код AS3:

var boxes:Array/*of MovieClip*/ = [new Box1(), new Box2(), new Box3(), new Box4()];
 
for (var i:uint = 0; i < 4; i++) {
  var box:MovieClip = boxes[int(Math.random() * boxes.length)] as MovieClip;
  box.x = i * 10;
  addChild(box);
}


XMON 21.01.2013 15:45

вот кусочек кода:
Код AS3:

var BOXES:Array/*of Class*/ = [box1, box2, box3, box4];
for (var CLUB_ITEM:Number = 0; CLUB_ITEM < CLUBS.length; CLUB_ITEM++)
{
        if (String (CLUBS[CLUB_ITEM]) == String (NAME_ROOM[1]))
        {
                with(addChild(new floorCLUB100x50)){x = CLUBS[CLUB_ITEM].x; y = CLUBS[CLUB_ITEM].y;}
                for (var i:uint = 0; i < 4; i++)
                {
                        var BOXES_ITEM:MovieClip = new (BOXES[int(Math.random() * BOXES.length)] as Class)() as MovieClip;
                        BOXES_ITEM.x = i * 10;
                        addChild(BOXES_ITEM);
                }
        }
}

но при выполнении выдает ошибку:
Код AS3:

TypeError: Error #1007: Попытка реализации в объекте, который не является конструктором.
        at ClearSniper_fla::Timeline_1/CLUB_TIMER()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at flash.utils::Timer/tick()

из-за чего выдает ошибку?

iflamberg 21.01.2013 15:54

Лично мне не понятно из-за чего выдает ошибку. Слишком маленький кусок текста, непонятно что в других переменных, непонятен контекст. Но, очевидно, что если ты пройдешься дебагером по этим строчкам, или хотя бы расставишь трейсы, то тебе самому многое прояснится.


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

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