Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ddlightw

Diferença de movimentação e medidas do AS2 para AS3

Recommended Posts

Tentei adaptar esse código, mas o movieclip não se move pela tela, tem uma diferença de visualização, não funciona com os mesmos números no AS3, tem alguma alteração do as2?

Tem outra forma de fazer esse calculo?

 

AS2

for (var i = 0; i < 250; i++)
{
var nm = "star" + i;
_root.attachMovie("star", nm, i);

_root[nm]._x = Math.random() * 550;
_root[nm]._y = Math.random() * 400;	

_root[nm].distance = Math.random() * 200 + 1;

_root[nm]._xscale = 1000 / _root[nm].distance;
_root[nm]._yscale = 1000 / _root[nm].distance;
_root[nm].speed = 20 / _root[nm].distance;	

_root[nm].onEnterFrame = function()
{
	this._x += this.speed;
	if (this._x > 550) this._x = 0;
}
}

 

AS3

 

var stageWidth:Number = stage.stageWidth;
var stageHeight:Number = stage.stageHeight;

//var speed = 10;

for (var i = 0; i < 250; i++)
{

var bola = new Star();

addChild(bola);

bola.x = Math.random() * stageWidth - 10;
bola.y = Math.random() * stageHeight - 10;	

bola.distance = Math.random() * 500 + 1;

bola.scaleX =  25 / bola.distance;
bola.scaleY =  25 / bola.distance;
bola.speed = 500 / bola.distance;	

trace(this.speed);

bola.addEventListener(Event.ENTER_FRAME, EnterFrame);

function EnterFrame(e:Event):void{

	this.x += this.speed;

	if (this.x > stageWidth) this.x = 0;
}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu!!! :grin:/>/>

Funcionou.

 

Ficou assim:

 

var stageWidth:Number = stage.stageWidth;
var stageHeight:Number = stage.stageHeight;

for (var i = 0; i < 250; i++)
{
var bola = new Star();
addChild(bola);

bola.x = Math.random() * stageWidth;
bola.y = Math.random() * stageHeight;

bola.distance = Math.random() * 2000 + 1;// tive que modificar o valor

bola.scaleX = 8 / bola.distance; // tive que modificar o valor
bola.scaleY = 8 / bola.distance; // tive que modificar o valor
bola.speed = 120 / bola.distance; // tive que modificar o valor

trace(bola.speed);

bola.addEventListener(Event.ENTER_FRAME, EnterFrame);

function EnterFrame(e:Event):void
{

	e.currentTarget.x +=  e.currentTarget.speed;

	if (e.currentTarget.x > stageWidth)
	{
		e.currentTarget.x = 0;
	}
}
}

 

Tem algumas coisas que eu fiquei sem entender, a utilização do _root[nm] e do this, isso não é meio de programar é algo que faz parte do AS2?

 

var nm = "star" + i; //se tem o loop, pra que serve?

 

_root.attachMovie("star", nm, i);// essa parte é para criar o movieclip, certo?

 

_root[nm]// existe isso no AS3? porque eu entendia que seria um array, mas nesse caso acho que não é essa a função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O root ainda existe só que agora é root, mas eu particularmente quase não uso.

O this se refere ao nível atual. No as 2.0 o this se referia a um objeto específico como um botão ou um movie clip dependendo do escopo.

A utilização de [] (colchetes) ocorre devido ao estilo dos objetos do actionscript 3.0 onde você pode acessar as propriedades por meio de chaves, como strings. Assim, quando você utiliza bola["speed"] ou bola["bt" + 1] você está acessando uma propriedade do objeto bola e é o mesmo que utilizar bola.speed e bola.bt1

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.