Ir para conteúdo

POWERED BY:

Arquivado

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

ovudo

[Resolvido]criar quadrados dinamicamente

Recommended Posts

galera eu to tentando (já a um tempo) escrever um script para criar um quadrado de canto arredondado:

function criarQuadArredondado(xis:uint, yis:uint, lar:uint, alt:uint, arre:uint):void {
var arred:Sprite = new Sprite();
arred.graphics.lineStyle(3, 0xCCCCCC);
arred.graphics.drawRoundRect(0,0,lar,alt,arre);
arred.name=("quad"+i);
addChild(arred);
arred.x=xis;
arred.y=yis;
}
for (var i:uint = 1; i<5; i++) {
criarQuadArredondado(350,70,stage.stageWidth-380,30,15);
}
vejam que cada quadrado recebe um nome "quad+i", preciso que cada quadrado fique abaixo do outro (com o codigo acima todos ficam um encima do outro).

dentro do "for" por ex, eu não consigo pegar as propriedades do quad2.x, (dentro do FOR, trace(quad2.x)) porque isso acontece?

 

obrigado a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um exemplo até melhor um pouquinho, criei um tabuleiro 6x6 pra você entender o esquema, e coloquei o nome das instancias tb.

 


var container:Sprite = new Sprite();
stage.addChild(container);


for(var i:uint = 0; i < 6; i++){
		for(var j:uint=0; j<6; j++){
			
		quad((i * 52 + 120),(j * 52 + 45),20,20,"quad" + i);
}
}
function quad(posX,posY,l,a,nome):void{
			var c:Sprite = new Sprite();
			c.name = nome;
			c.graphics.beginFill(0x000000);
			c.graphics.drawRect(posX,posY,l,a);
			c.graphics.endFill();
			container.addChild(c);
			trace(c.name);
			
		}

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adaptei um exercício com um movie clip na library, mas acho que serve pra dar uma idéia.

 

Veja o exemplo >> http://img844.imageshack.us/img844/1162/fory.jpg

 

Apenas o uso do 'for' causa o empilhamento, é preciso definir a posição do novo objeto adicionado a cada lopp.

 

A solução é um 'for' dentro de outro 'for'.

 

package 
{
	import flash.display.MovieClip;
	
	public class PlaceMovieDesafio2 extends MovieClip
	{

		public function PlaceMovieDesafio2():void
		{
			
			for (var i:int =0; i<4; i++)
			{
				for (var j:int =0; j<4; j++)
				{
					var mymovie:MyMovie2= new MyMovie2();
					addChild(mymovie);
					
					mymovie.y = (j *110);
				}
			}
			
		}
	}
}

Se deseja que o objeto não tenha distanciamento com o que se encontra abaixo, fica apenas:

 

mymovie.y = (j *110);

Não tenho domínio no uso de objetos dinâmicos, ficou mais fácil para mim testar com este exemplo.

 

 

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um exemplo até melhor um pouquinho, criei um tabuleiro 6x6 pra você entender o esquema, e coloquei o nome das instancias tb.

 


var container:Sprite = new Sprite();
stage.addChild(container);


for(var i:uint = 0; i < 6; i++){
		for(var j:uint=0; j<6; j++){
			
		quad((i * 52 + 120),(j * 52 + 45),20,20,"quad" + i);
}
}
function quad(posX,posY,l,a,nome):void{
			var c:Sprite = new Sprite();
			c.name = nome;
			c.graphics.beginFill(0x000000);
			c.graphics.drawRect(posX,posY,l,a);
			c.graphics.endFill();
			container.addChild(c);
			trace(c.name);
			
		}

 

Abs

 

ok cara, muito obrigado mesmo, entendi perfeitamente o que eu devo mudar.

agora, e se eu quiser pegar o '.x' do quad0 (isso fora do codigo, digamos:

 

var container:Sprite = new Sprite();

stage.addChild(container);

 

 

for(var i:uint = 0; i < 6; i++){

for(var j:uint=0; j<6; j++){

 

quad((i * 52 + 120),(j * 52 + 45),20,20,"quad" + i);

}

}

function quad(posX,posY,l,a,nome):void{

var c:Sprite = new Sprite();

c.name = nome;

c.graphics.beginFill(0x000000);

c.graphics.drawRect(posX,posY,l,a);

c.graphics.endFill();

container.addChild©;

trace(c.name);

 

}

trace(quad0.x)

 

ele da o erro: 1120: Access of undefined property quad0.

 

obrigado pela ajuda

 

Adaptei um exercício com um movie clip na library, mas acho que serve pra dar uma idéia.

 

Veja o exemplo >> http://img844.imageshack.us/img844/1162/fory.jpg

 

Apenas o uso do 'for' causa o empilhamento, é preciso definir a posição do novo objeto adicionado a cada lopp.

 

A solução é um 'for' dentro de outro 'for'.

 

package 
{
	import flash.display.MovieClip;
	
	public class PlaceMovieDesafio2 extends MovieClip
	{

		public function PlaceMovieDesafio2():void
		{
			
			for (var i:int =0; i<4; i++)
			{
				for (var j:int =0; j<4; j++)
				{
					var mymovie:MyMovie2= new MyMovie2();
					addChild(mymovie);
					
					mymovie.y = (j *110);
				}
			}
			
		}
	}
}

Se deseja que o objeto não tenha distanciamento com o que se encontra abaixo, fica apenas:

 

mymovie.y = (j *110);

Não tenho domínio no uso de objetos dinâmicos, ficou mais fácil para mim testar com este exemplo.

 

 

 

 

Abraços

 

ok cara, entendi perfeitamente como usar o "mymovie.y = (j *110);" muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

É porque o objeto ta sendo criado dentro da function amigão dai o escopo da variavel é local e você ta tentando acessar fora da função.

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

É porque o objeto ta sendo criado dentro da function amigão dai o escopo da variavel é local e você ta tentando acessar fora da função.

 

Abs

 

e como eu faço para resolver isso?

(desculpem tantas duvidas, mas tem 3 anos que eu não programo, e quando eu programava era em AS1)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce pode criar um array fora da funcao e adicionar todos os objetos dentro dele, dai você tem como acessar todos eles usando o vetor.

 

Abs http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce pode criar um array fora da funcao e adicionar todos os objetos dentro dele, dai você tem como acessar todos eles usando o vetor.

 

Abs http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

Muito obrigado cara, eu nunca iria imaginar que seria tão facil assim, fica ai a dica para alguem mais que tenha a mesma duvida.

 

obrigado vei...

 

valew mesmmo....

 

var arrai:Array = new Array();
var container:Sprite = new Sprite();
stage.addChild(container);
for (var i:uint = 0; i < 6; i++) {
        for (var j:uint=0; j<6; j++) {
            quad((i * 52 + 120),(j * 52 + 45),20,20,"quad" + i);
        }
}
function quad(posX,posY,l,a,nome):void {
        var c:Sprite = new Sprite();
        c.name=nome;
        c.graphics.beginFill(0x000000);
        c.graphics.drawRect(0,0,l,a);
        c.x=posX;
        c.y=posY;
        c.graphics.endFill();
        addChild( c );
        arrai.push( c );
}
for (var d:uint = 0; d < arrai.length; d++) {
        trace(arrai[d].name +"  posY:"+arrai[d].y +"  posX:"+arrai[d].x);
}

obrigado a todos

 

como eu faço para mudar o titulo da mensagem e colocar [resolvido]? rsrsrs sempre sobra alguma duvida!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw camarada.

Só nós moderadores que podemos editar o topico e colocar[Resolvido]

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.