Ir para conteúdo

POWERED BY:

Arquivado

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

Daniel o rei

[Resolvido] movieclip(root).array[].x não funciona

Recommended Posts

Tenho esse script

objdi[i]["largura"] =  MovieClip(mclist[i]).width ;   
objdi[i]["altura" ] =  MovieClip(root).mclist[i].height;  
objdi[i]["x"] =  mclist[i].x;  
objdi[i]["y"] = mclist[i].y;*/
Da para ver que já tentei de tudo.

mclist é um array onde estão guardados os mcs. objdi deve ser o array onde serão guardados as dimensões de determinados mc.

Eu não consigo de geito nenhum pegar as dimensões e as cordenadas desses mcs.

Esse post foi feito pelo Moderador Thiago de Oliveira Cruz no tópico Um termo é indefinido e não tem propriedades

Porque em vez de fazer objdi["valor"]

 

Você não faz corretamente... e escreve assim: objdi.valor e atribui um valor?

 

E se algum dos valores como width e height, não puderem ser pegos, pois o objeto foi carregado sem capturar as informações dele, ele vai mostrar esse erro.

 

width e height de MovieClips em AS 2 se pega só dentro do onloadInit e no AS3 também se pega dentro desse evento.

 

Se esse evento não existir, não tem como você dar essas informações do objeto se ele for dinãmico.

Ou seja isso aqui:

MovieClip(root).mclist.width ;

e

MovieClip(root).mclist.height ;

São undefined

 

 

Abraços

Eu não intendi direito. Deu erros. Parece que onloadinit não existe no AS2.

Eu achei isso:http://www.kirupa.com/forum/showthread.php?p=2583065

Alguem conseguiu algo parecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce ja tentou criar tres vetores, um pra guardar os movies, outro pra guardar a altura e o ultimo pra guardar a largura dai dentro de um for você passar a altura e largura dos mcs do primeiro vetor pro outros dois vetores???

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. Vou explicar melhor.

mclist tem movieclips. Eu preciso guardar dimensões de movieclips que estão em mclist. Porém eu não consigo ter acesso a eles.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você ta usando ActionScript 3

 

Você tem que fazer assim:

var loader:Loader = new Loader();

loader.load(new URLRequest("http://forum.imasters.com.br/random_logos/logo2.png"));
loader.contentLoaderInfo.addEventListener(Event.INIT, imageINIT);

function imageINIT(e:Event):void{
	trace(e.target.width);//output:335
	trace(e.target.height);//output:102
	addChild(loader);
}

Em actionScript 2

var mc:MovieClip = _root.createEmptyMovieClip("mc",1);
var mcl:MovieClipLoader = new MovieClipLoader();

mcl.loadClip("http://forum.imasters.com.br/random_logos/logo2.png", mc);

function onLoadInit(mc:MovieClip){
	trace(mc._height);
	trace(mc._width);
}

mcl.addListener(this)

Lembrando que onLoadInit o L é maiusculo e o I tbm

 

Se tivesse procurado o que falei... teria encontrado.

Mas é mais fácil perguntar denovo né?

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como também modificar as propriedades?

Lembrando que os moviesclips estão em mclist.

Eu estava usasndo o histestpoint da seguinte forma:

 

me:MouseEvent

 

 

if(MovieClip(root).mclist.hitTestPoint(me.stageX , me.stageY, true)){

 

Esse script verifica se no momento em que o usuario clicou no stage verifica se houve colisão com mclist.

 

 

O hittest deu certo. Funciona perfeitamente mas as propriedades do movieclip...

Eu tentei usar da mesma forma: MovieClip(root).mclist.x

Não deu certo.

E agora?

Lembrando a pergunta que fiz no início do post:Tem como também modificar as propriedades?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim após você ter carregado todas as informações

 

Basta você fazer: MovieClip(root).mclist.x = 200

 

Que você vai ter a nova posição X

Isso se isso for Action Script 3

 

Se for 2 o x é _x

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como posso fazer isso num movieclip?

Pus o var loader:Loader = new Loader(); dentro da classe do package

O loader.contentLoaderInfo.addEventListener(Event.INIT, imageINIT); na função principal

A função imageINIT dentro da classe.

E o loader.load no lugar onde eu preciso das propriedades que não foram carregadas.

O parametro request do método load deve ser URLRequest. Como eu faço para isso funcionar num movieclip ao invéz de uma imagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce vai usar isso ai pra carregar ou filmes externos ou imagens externas, se é um movieclip que ta na sua library, você so precisa dar um nome pra ele no export actionscript, um nome de Classe e instancia-lo:

 

var mc:MC = new MC();
mc.x = 100;
mc.y = 100;
addChild(mc);

Flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece que os mcs devem estar dentro do array.

Eu descobri o problema!

Está nesse script:

function selectUP(me2:MouseEvent):void{
			sl.visible = false;
			//MovieClip(root).mclist[objcolide].Drag();
			for(i = 0; i <= (mclist.length) - 1 ; i++ ){
				
			if(MovieClip(root).mclist[i].mc.hitTestObject(sl)){
				objcolides.push(i) ;  i = mclist.length ;scolide = true;
				//
				consegui.text =  mclist[i].posx();  
				/*objdi[i]["x"] =  mclist[i].x;  
				objdi[i]["y"] = mclist[i].y;*/
				//MovieClip(root).mclist[i].Drag();
			}
			else{scolide= false;}
			}
lvleditor.as

Se observarem bem vão perceber que para fazer com que o for parasse eu coloquei na variavel i o valor mclist.lenght.

Depois eu TENTO pegar as propriedades X e Y. Eu até criei o método posx() que retorna a propriedade x.

Mas como é que eu ia pegar esses valores se eu já coloquei o mclist.length na variavel i?

Se eu quizesse parar o for eu colocaria no final do for ou do if:i = mclist.length - 1;

É dificil de acreditar que todo esse problema foi causado por 19 caracteres(i = mclist.length ;)!

Meu script:

package{
	import flash.display.MovieClip;	 import flash.display.Loader ;
	import object ;
	import flash.events.MouseEvent ;
	import flash.events.Event ;
	public class lvleditor extends MovieClip{
		var sl = new selecionar();
		var dwmx:Number;var contax:Number;var i:Number; var objcolide:Number ; var objcolides:Array = new Array(); var objdi:Array = new Array();var xm:Number;var xme:Number;var objsl = new csel();var loader:Loader = new Loader();

		var dwmy:Number;var contay:Number;var mclist:Array = new Array() ; var colide:Boolean = true; var obj:MovieClip ; var scolide:Boolean;   var ym:Number;var yme:Number;var sldi:Array = new Array(); 
		public function lvleditor(){
			/*sl.visible = false;*/
		addChild(sl);
		/*sl.height = 50 ;
		sl.width = 50 ;*/
//		
		/*a.setmc(new um());
		addChild(a.mc);
		a.setpos(300,300);*///mclist[0] = a;
		mclist.push(new object());
		mclist[mclist.length - 1].setmc(new um());
		mclist[mclist.length - 1].mc.x=50;
		addChild(mclist[(mclist.length)-1].mc);
		mclist[mclist.length - 1].setpos(300,300);
		consegui.text = mclist[mclist.length - 1].mc.x;
			addEventListener(Event.ENTER_FRAME,doStep);
			stage.addEventListener(MouseEvent.MOUSE_DOWN,selectDOWN);
			stage.addEventListener(MouseEvent.MOUSE_UP,selectUP);
			

		}
		function selectUP(me2:MouseEvent):void{
			sl.visible = false;
			//MovieClip(root).mclist[objcolide].Drag();
			for(i = 0; i <= (mclist.length) - 1 ; i++ ){
				trace(i);
			if(mclist[i].mc.hitTestObject(sl)){
				objcolides.push(i) ; scolide = true;
				trace(i+"dentro do for");
				//
				consegui.text =  mclist[i].mc.x + "EU SOU O CARA";  i = mclist.length ; /*mclist[0].mc.startDrag() ;*/
				/*objdi[i]["x"] =  mclist[i].x;  
				objdi[i]["y"] = mclist[i].y;*/
				//MovieClip(root).mclist[i].Drag();
			}
			else{scolide= false;}
			}
			
			/*if(scolide == true)
			{
			
				for(i = 0; i <= (objcolides.length) - 1 ; i++ ){
				if(MovieClip(root).mclist[i].x > xm){xm = (MovieClip(root).mclist[i].x) + (MovieClip(root).mclist[i].width) / 2}
				if(MovieClip(root).mclist[i].y > ym){ym = (MovieClip(root).mclist[i].y) + (MovieClip(root).mclist[i].height)/ 2}
				if(MovieClip(root).mclist[i].y > yme){yme = (MovieClip(root).mclist[i].y) - (MovieClip(root).mclist[i].height)/2}
				if(MovieClip(root).mclist[i].x > xme){xme = (MovieClip(root).mclist[i].x) - (MovieClip(root).mclist[i].width) /2}
				
			
			}
			objsl.x = xme;
			objsl.y = yme;
			objsl.width = xm - xme;
			objsl.height= ym - yme;
			}*/
		}
		function doStep(e:Event):void{
			pmx.text = "X:" + mouseX ;
			pmy.text = "Y:" + mouseY ;dms.text = "dwmx =" + dwmx + "dwmy =" + dwmy ;
			contax = ( mouseX - dwmx);
			contay = ( mouseY - dwmy );
			if(contax < 0){
				sl.x = dwmx - Math.abs(contax);
			}else{
				sl.x = dwmx;
			}
			if(contay < 0){
				sl.y = dwmy - Math.abs(contay);
			}else{
				sl.y = dwmy;
			}
			sl.width  = Math.abs(contax) ;
			sl.height = Math.abs(contay) ;
		}
		function selectDOWN(me:MouseEvent):void{
			
			for(i = 0; i <= (mclist.length) - 1 ; i++ ){
				
			if(MovieClip(root).mclist[i].hitTestPoint(me.stageX , me.stageY, true)){
				objcolide = i ; colide = true ; col.text = "true" ; i = mclist.length ;//MovieClip(root).mclist[i].Drag();
			}
			else{colide = false;col.text = "false";}
			}
			if(colide == false){
			sl.x = me.stageX ;
			sl.y = me.stageY ;
			dwmx = me.stageX ;
			dwmy = me.stageY ;
			sl.visible  = true ;
			evm.text = "x:" + me.stageX + "Y:" + me.stageY ;
			}
		
		}
		
		}
	
	
	
}
object.as
package{
        import flash.display.MovieClip ;
      
        
        public class object extends MovieClip {
        var xmlstring:String ;
             //   var positionX:Number;
		var mc:MovieClip;
        public function object(){

		
        
        
        }
public function setmc(mcc:MovieClip):void{
        this.mc = mcc ;
		
        //addChild(this.mc);
}
public function posx():Number{

return this.mc.x;	
	
}
public function setpos(yps:Number,xps:Number):void{
this.mc.y  = yps;
this.mc.x  = xps;

        
}
        
}}
Se eu botasse meu script inteiro seria difícil alguem me responder.

 

0brigado a todos que me ajudaram!

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.