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

zackscript 21.06.2016 12:52

Добавление объекта в каждый индекс.
 
Нашёл для себя код из as2 который хотелось бы перевести его на as3 , а если быть по конкретнее то мне надо осуществить аналог attachMovie (as 2.0) , в голову пришло только как добавить экземпляр мувы из библиотеки в в массив .
вот as 2
Код AS1/AS2:

var depth =0 
++ depth
var bullets = "bul" + depth; // bul1,bul2,bul...n
_root.attachMovie("bul",bullets,depth);

то есть мне надо добавить мувики на сцену уже под другими именеми например:
bull1
bull2
bull...n
as 3 хотел написать так что бы при каждом клике экземпляр добавлялся в порядковый индекс
Код AS3:

var bull:MovieClip = new bul();
        var arr:Array = new Array();
        arr.push(addChild(bull));
        trace(arr.length)

трейс пишет все время 1,1,.......1
как это вообще сделать правильнее ?

Tails 21.06.2016 14:59

Самый простой аналог:
Код AS3:

root.addChild(new bul());

Массив у вас каждый раз заново создаётся, вот и пишет 1.

zackscript 21.06.2016 15:06

Тэилс генерит ошибку
Я так понимаю индекс каждый раз будет расти и для обращения к каждому можно воспользоваться методом
getChildIndex. ладно буду разбираться.

Tails 21.06.2016 15:16

Вы можете использовать один отдельный контейнер, куда будете помещать только bul, тогда потребности в массиве не будет.
Что за ошибка?

ZackMercury 21.06.2016 15:32

Код AS3:

(root as DisplayObjectContainer).addChild(new bul());

?

zackscript 21.06.2016 18:01

Почти разобрался , при каждом клике (для примера )я добавляю объекты на растоянии друг от друга
но почему trace(numChildren) возвращает индексацию с 2 ? почему не с одного ?

ZackMercury 21.06.2016 18:47

numChildren не возвращает индексацию, он возвращает количество детей конкретного контейнера(0~∞).

zackscript 21.06.2016 19:17

ZackMercury Stage ведь тоже контейнер ? так ведь ?
Цитата:

он возвращает количество детей конкретного контейнера(0~∞).
Эт понятно, но почему при первом клике трейс выдает что имеется уже два объекта , ведь она не могла добавится сама по себе до клика ?

ZackMercury 21.06.2016 19:37

Код AS3:

const OBJ_SIZE:int = 50;
var objects:Array = [];
 
function addObject(x:int = 0, y:int = 0):Shape
{
        var shp:Shape = new Shape();
        var g:Graphics = shp.graphics;
        var gradientMatrix:Matrix = new Matrix();
        gradientMatrix.rotate(Math.PI/2);
        gradientMatrix.scale(0.05, 0.05);
        gradientMatrix.translate(20, 20);
        g.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [1,1], [0x00, 0xFF], gradientMatrix, SpreadMethod.PAD);
        g.drawRoundRect(0, 0, OBJ_SIZE, OBJ_SIZE, 10, 10);
        g.endFill();
        g.beginFill(0xFFFFFF);
        g.drawCircle(OBJ_SIZE/2, OBJ_SIZE/2, OBJ_SIZE / 4);
 
        addChild(shp);
        shp.x = x;
        shp.y = y;
        return shp;
}
 
stage.addEventListener(MouseEvent.MOUSE_DOWN, onStageClick);
function onStageClick(e:MouseEvent):void
{
        objects.push(addObject(e.target.mouseX, e.target.mouseY));
        for(var i:int = 0; i < objects.length; i ++)
                objects[i].alpha = (1+i)/objects.length;
}

Добавлено через 1 минуту
stage - контейнер, но он вам дан не для того, чтобы вы в него добавляли детей.
Изначально он имеет 1 ребёнка: ваш главный класс. Вы можете увидеть имя ребёнка написав
Код AS3:

trace(stage.getChildAt(0));

Цитата:

хотел написать так что бы при каждом клике экземпляр добавлялся в порядковый индекс
При каждом addChild новый объект всегда будет поверх остальных(в индексе (numChildren-1)).
Если вам нужно добавлять в конкретный индекс, то вам нужен метод
http://help.adobe.com/ru_RU/FlashPla...l#addChildAt()

zackscript 21.06.2016 20:18

Вроде разобрался
создаю контейнер
Код AS3:

var cont:Sprite = new Sprite();

и при каждом клике кидаю поверх остальных в контейнер
Код AS3:

var bull:MovieClip = new bul();
        cont.addChild(bull);
        trace(cont.numChildren); // 1,2,...N



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

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