Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Изменение глубины объектов AS2 AS3 (http://www.flasher.ru/forum/showthread.php?t=153624)

Universe 06.04.2011 15:15

Изменение глубины объектов AS2 AS3
 
Помогите перевести строку из AS2 в AS3!
Вот код
Код AS3:

var numOfBalls:Number = 10;
var radiusX:Number = 250;
var radiusY:Number = 75;
var centerX:Number = stage.stageWidth / 2;
var centerY:Number = stage.stageHeight / 2;
var speed:Number = 0.05;
var ball_mc:Ball;
var ballsCont:Sprite = new Sprite();
var ballsCont2:Sprite = new Sprite();
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
 
function onMove(e:MouseEvent):void
{
        speed = (this.mouseX-centerX)/7500;
}
 
for(var i:uint=0;i<numOfBalls;i++)
{
        ball_mc = new Ball();
        ballsCont2.addChild(ball_mc);
        ball_mc.angle = i * ((Math.PI*2)/numOfBalls);
        ball_mc.addEventListener(Event.ENTER_FRAME, mover);
}
 
addChild(ballsCont);
ballsCont.addChild(ballsCont2);
ballsCont2.x -= ballsCont2.width;
ballsCont2.y -= ballsCont2.height;
ballsCont.rotation = 35;
 
function mover(e:Event):void
{
        e.target.x = Math.cos(e.target.angle) * radiusX + centerX;
        e.target.y = Math.sin(e.target.angle) * radiusY + centerY;
        var scale = e.target.y /(centerY+radiusY);
        e.target.scaleX = e.target.scaleY = scale;
        e.target.angle += speed;
        //this.swapDepths(Math.round(this.scaleX) + 100);
}

Не могу понять как изменить закоментированную строку, в которой происходит смена глубины объектов. Насколько я знаю в As3 нельзя назначить произвольный уровень глубины. Что делать?

tsarapkabel 06.04.2011 15:38

В ActionScript 3.0 можно получить аналогичную функциональность, используя методы класса DisplayObjectContainer, например методы addChildAt(), setChildIndex(), swapChildren() и swapChildrenAt().
Из хелпа.

Universe 06.04.2011 16:19

это понятно. Я просто не могу понять как именно в данном случае менять высоту. Это карусель обычная. Получается надо делать чтото вроде
Код AS3:

setChildIndex(e.target, numChildren-1);

Добавлено через 22 минуты
Изменил на следующую строку
Код AS3:

e.target.parent.setChildIndex(e.target, Math.floor(e.target.scaleX * (e.target.parent.numChildren)));

Вроде работает но появляется странный глюк. Первый объект, у которого индекс 0 - никогда не меняет индекс! Все остальные шары меняют индекс нормально!

MAPUTO 06.04.2011 19:28

Цитата:

Сообщение от tsarapkabel (Сообщение 987085)
...например методы addChildAt(), setChildIndex(), swapChildren() и swapChildrenAt()...

Используй swapChildrenAt() в цикле. Так будет без глюков


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

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