PDA

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


Universe
06.04.2011, 15:15
Помогите перевести строку из AS2 в 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().
Из хелпа (http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/migration.html).

Universe
06.04.2011, 16:19
это понятно. Я просто не могу понять как именно в данном случае менять высоту. Это карусель обычная. Получается надо делать чтото вроде
setChildIndex(e.target, numChildren-1);

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

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

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

MAPUTO
06.04.2011, 19:28
...например методы addChildAt(), setChildIndex(), swapChildren() и swapChildrenAt()...

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