Ir para conteúdo

POWERED BY:

Arquivado

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

Rariel

Validação

Recommended Posts

Pesoal eu de novo mas dessa vez eu to com um pequeno probleminha é o seguinte, eu tenho um objeto que e inserido no palco atraves de um botao, esse objeto, vem com um apalvra inserido no seu centro, (uma label), o problema é o seguinte quando o usuario clicar um vz no botao esse objeto deve ser inserido com uma determinada palavra, quando o usuario clicar uma segunda vez no mesmo botao esse objeto deve ser inseido com outra palavra, existe uma opção ou sej aum botao q quando clicado remove o objeto que eu quiser no palco, o problema é o seguinte quando eu remover por exemplo o objeto que contem a palavra FIM ele deve inserir um objeto com a mesma palavra, e isso nao ocorre ele inseri um objeto com a outra palavra. segue o codigo abaixo:

 

//Função para criar novos objetos assim quer for clicado no botao btniniciofim, Inicio-Fim.
function CriaInicioFim(evt:MouseEvent):void {
	var objiniciofim = new mcInicioFim();
	ListaId.push(objiniciofim);

	if (x1 == 1) {
		objiniciofim.lbVariavel.text = "Inicio";
		x1+=1;
		
	} else if (x1 == 2) {
		objiniciofim.lbVariavel.text = "Fim";	
		x1-=1;
	
	if (cont > 2) {
		MsgBox.y = 300;
		MsgBox.x = 500;
		addChild(MsgBox);
		MsgBox.btnOk.addEventListener(MouseEvent.CLICK, Valida);
	} else {
		ListaInicioFim.push(objiniciofim);
		objiniciofim.x = 250;
		objiniciofim.y = 150;
		addChild(DisplayObject(objiniciofim));
		cont+=1;
	}
}
btniniciofim.addEventListener(MouseEvent.CLICK, CriaInicioFim);

 

esse o trecho problema

if (x1 == 1) {
                objiniciofim.lbVariavel.text = "Inicio";
                x1+=1;
                
        } else if (x1 == 2) {
                objiniciofim.lbVariavel.text = "Fim";   
                x1-=1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma verificada no encadeamento dos seus condicionais. o objiniciofim por exemplo só está sendo adicionado ao palco se o x1 for 2, e o cont<=2. Então pra quê está sendo criado antes? o_O

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

É pq essa validação do x1 e pra verificar qual objeto tem que iniciar com qual palavra, exmplo: ao clicar uma primeira vez ele inseri um objeto com a palavra inicio se eu clicar uma segunda vez no botao ele inserir o mesmo objeto com outra palvra (fim) o problema é se eu removo na sequencia ele inseri o outro objeto com a outra palavra e nao com mesma palavra que havia no objeto anterior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

falei pq você está criando um objeto antes... e dependendo do encadeamento, ele sequer é usado.

 

além disso com variáveis com nomes que não identificam muito, com comparações com valores literais sem comentários, fica dificil entender...

 

programar é muito mais que escrever códigos que o computador interprete. É escrever de forma que outras pessoas possam entender tb. Use comentários, use nomes de variáveis que as descrevam satisfatoriamente, que fica mais fácil de ajudar. Um planejamento (pode ser no papel mesmo) antes de escrever o código também ajuda na lógica.

 

quanto ao problema que já existe... já tentou ir debugando com traces pra ver se sua lógica está sendo executada da forma que você quer?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta vou te explicar com mais detalhes, é o seguinte eu crie um menu onde ao clicar em um dos botoes é inseridono palco um objeto certo porém um desses objetos deve aparecer com um palvra escrita dentro dele (Inicio) e quando clicado novamente neste botao deve se inserir novamnete um novo filho com outra palavra escrita dentro dele com o nome (FIM), o probelma e o seguinte eu tenho que criar uma forma onde caso o usuario remova um desses objetos ele possa inserir-lo novamente com a mesma palavra que o objeto anterior foi removido, isso em qualquer seguencia. ex: inserir um objeto atraves do botao com a palavra (inicio), depois cliquei no memo botao e inseri mais um objeto porem agora como a palavra (Fim), imaginemos que eu queira remover o objeto com a palavra fim e inseri-lo novamente, ai é que entra o problema quando faço isso ele inseri o objeto porém com a outra palavra (INICIO), e isso nao pode acontecer, se ele remover um objeto 10 vezes com a palavra (fim) esse objeto quando inserido novamente eve conter a palavra (fim) a mema coisa para o outro objeto se eu remover 10 vezes o objeto que contenha a palavra inicio e quiser add novamnete atraves do mesmo botao, ele deve inserir o objeto com a mesma palavra (inicio). o que ocorre é o contrario se apos inserir os dois objetos um escrito inicio e outro fim, se eu remover o fim ouo inicio seja qual for ele inseri o terceiro objeto com a palavra igual a do que esta no palco. vou posta todo o codigo:

import flash.display.BitmapData;
import flash.geom.Point;

//Objetos e variaveis Globais
var cont:int = 1;
var x1:int = 1;
var x2:int = 0;
var ListaId:Array = new Array();
var ListaInicioFim:Array = new Array();
var bor = new mcBorracha();
var MsgBox = new mcMsgBox();
//Função para checar validação de messagem.
function Valida(e:MouseEvent):void {
	removeChild(DisplayObject(MsgBox));
}

// Função remove o objeto do Palco quando a borracha e acionada no botao btnBorracha
function removeObjetos(e:MouseEvent):void {
	for (var ob in ListaId) {
		if (e.currentTarget == ListaId[ob]) {
			ListaId[ob];
		}
	}
	removeChild(DisplayObject(e.currentTarget));
	ob = 0;
	for (var ob1 in ListaInicioFim) {
		if (e.currentTarget == ListaInicioFim[ob1]) {
			cont-=1;
		}
	}
	ob1 = 0;
}


//Função para pegar Objetos e arrastar no palco atraves do botão brnSelecao
function Selecao(e1:MouseEvent):void {
	addChild(bor);
	removeChild(bor);
	for (var ob in ListaId) {
		if (e1.currentTarget == ListaId[ob]) {
			ListaId.slice(ob ,1);
		}
	}
	stage.addEventListener(MouseEvent.MOUSE_UP,Solta);
	e1.currentTarget.startDrag();
	e1.currentTarget.buttonMode = true;

	for (var x:int = 0; x < ListaId.length; x++) {
		ListaId[x].removeEventListener(MouseEvent.MOUSE_OVER, Selecao);
	}

}


/*Função para soltar o objeto no palco, qualquer objeto pois o comando stage
tem a propriedade de controlar eventos relativos que estão sobre o palco*/
function Solta(evt:Event):void {
	stopDrag();
}


/*Desfaz a selecao dos objetos arrastaveis quando clicado no brnPonteiro ou seja tudo que era arrastavel ate o momento no palco deve fica fixo.*/
function Ponteiro(ev:Event):void {
	addChild(bor);
	removeChild(bor);
	for (var x:int = 0; x < ListaId.length; x++) {
		ListaId[x].removeEventListener(MouseEvent.MOUSE_OVER, removeObjetos);
	}
	stage.addEventListener(MouseEvent.MOUSE_UP,Solta);

}
btnPonteiro.addEventListener(MouseEvent.CLICK, Ponteiro);


/*Função para percorrer a matriz e passar os elementos para a função que deve remove-los.*/
function CorreMatrizApaga(e:MouseEvent):void {
	for (var x:int = 0; x < ListaId.length; x++) {
		ListaId[x].addEventListener(MouseEvent.MOUSE_OVER, removeObjetos);
	}
	addChild(bor);
	bor.startDrag(true);
	stage.removeEventListener(MouseEvent.MOUSE_UP,Solta);
}
btnBorracha.addEventListener(MouseEvent.CLICK, CorreMatrizApaga);



//Função para os objetos para a função selecao
function CorreMatrizSelecao(e:MouseEvent):void {
	for (var x:int = 0; x < ListaId.length; x++) {
		ListaId[x].addEventListener(MouseEvent.MOUSE_OVER,Selecao);
	}
}
btnSelecao.addEventListener(MouseEvent.CLICK,CorreMatrizSelecao);


//Função para desenhar as ligaçoes com os objetos
function desenhaReta(ev:MouseEvent):void {
	var Pont:mcPonto = new mcPonto();
	ListaId.push(Pont);
	Pont.graphics.lineStyle(2 ,00000);
	Pont.graphics.moveTo(500, 500); 
    Pont.graphics.lineTo(200, 200);
	addChild(Pont);
	stage.addEventListener(MouseEvent.MOUSE_UP,Solta);
}
btnReta.addEventListener(MouseEvent.CLICK, desenhaReta);


//Função para criar novos objetos assim quer for clicado no botao btniniciofim, Inicio-Fim.
function CriaInicioFim(evt:MouseEvent):void {
	var objiniciofim = new mcInicioFim();
	ListaId.push(objiniciofim);
	
	/* validação que deveria criar o objeto com a mesma palavra apos removido do palco, obs: na primeira vez que ele inseri direitinho e apos remover qualquer um dos objetos ele inseri novo objeto com a palavra errada nao com a que ele foi deletado. */
	if (x1 == 1) {
		objiniciofim.lbVariavel.text = "Inicio";
		x1 = 2;
	} else if (x1 == 2) {
		objiniciofim.lbVariavel.text = "Fim";
		x1 = 1;
	}
	
	/* essa validação e a validação para uma test box q criei, onde sao permitidos a esse botao inserir apenas dois objetos um inicio e um fim, caso um dos dois seja removido e pemito inseri-lo novamente, caso os dois ja existao ele mostra uma messaebox que criei manualmente dizendo que sao permitidos inserir apenas dois objetos para esse botao*/ 
	if (cont > 2) {
		MsgBox.y = 300;
		MsgBox.x = 500;
		addChild(MsgBox);
		MsgBox.btnOk.addEventListener(MouseEvent.CLICK, Valida);
	} else {
		ListaInicioFim.push(objiniciofim);
		objiniciofim.x = 250;
		objiniciofim.y = 150;
		addChild(DisplayObject(objiniciofim));
		cont+=1;
	}
}
btniniciofim.addEventListener(MouseEvent.CLICK, CriaInicioFim);



//Função para criar novos objetos assim quer for clicado no botao btnEntrada, são as Variaveis.
function CriaEntrada(evt:MouseEvent):void {
	var objentrada = new mcEntrada();
	ListaId.push(objentrada);
	objentrada.x = 380;
	objentrada.y = 150;
	addChild(DisplayObject(objentrada));

}
btnEntrada.addEventListener(MouseEvent.CLICK, CriaEntrada);

//Função para criar novos objetos assim quer for clicado no botao btnEntrada, são as Condiçoes.
function CriaCondicao(evt:MouseEvent):void {
	var objCondicao = new mcCondicao();
	ListaId.push(objCondicao);
	objCondicao.x = 490;
	objCondicao.y = 150;
	addChild(DisplayObject(objCondicao));

}
btnCondicao.addEventListener(MouseEvent.CLICK, CriaCondicao);

//Função para criar novos objetos assim quer for clicado no botao btnProcesso, são os Processos.
function CriaProcesso(evt:MouseEvent):void {
	var objProcesso = new mcProcesso();
	ListaId.push(objProcesso);
	objProcesso.x = 640;
	objProcesso.y = 150;
	addChild(DisplayObject(objProcesso));

}
btnProcesso.addEventListener(MouseEvent.CLICK, CriaProcesso);

//Função para criar novos objetos assim quer for clicado no botao btnSaida, são as saidas.
function CriaSaida(evt:MouseEvent):void {
	var objSaida = new mcSaida();
	ListaId.push(objSaida);
	objSaida.x = 750;
	objSaida.y = 150;
	addChild(DisplayObject(objSaida));

}
btnSaida.addEventListener(MouseEvent.CLICK, CriaSaida);

outro problema eu ja li os topicos q você me mandou, mas aind anao consegui, resolver o problema de traçar uma reta entre dois objetos inseridos no palco, eu criei um botao que inseri um ponto no palco, ele inseri quantos pontos eu quiser, porem ele deveria traçar uma reta ligando os dois pontos quando o seguento tivesse sido inserido.

 

OBS: eu sei que a função que faz isso no codigo nao vai fazer isso pois estou indicando apenas coordenadas nopalco porem ja tentei de tudo para que umponto localize a coordenada do outro e trace essa reta ligando um ponto ao outro se tiver alguma ideia poste o codi por favor é muito importante, não é preguiça de ler eu ja li e ja tentei mas nao consegui resolvero problema se poder me da essa força fico muito grato. segue o codigo abaixo caso você nao ache ele no codigo completo:

 

//Função para desenhar as ligaçoes com os objetos
function desenhaReta(ev:MouseEvent):void {
var Pont:mcPonto = new mcPonto();
ListaId.push(Pont);
Pont.graphics.lineStyle(2 ,00000);
Pont.graphics.moveTo(500, 500);     
Pont.graphics.lineTo(200, 200); /* detalhe eu sei que aqui são informadas coordenadas no palco mas ele        deveria localizar um objeto e seligar ao outro ja inserido mas nao sei como fazer.*/
	
addChild(Pont);
stage.addEventListener(MouseEvent.MOUSE_UP,Solta);
}
btnReta.addEventListener(MouseEvent.CLICK, desenhaReta);

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando você os remove do palco, você não faz nenhuma verificação. Como quer que o player adivinhe qual foi o ultimo botão removido para inserir um igual?

 

na função que remove os objetos, faça um teste simples:

 

var objParaRemover:MovieClip = e.currentTarget as MovieClip;
if(objParaRemover is mcInicioFim){
	//Aqui, somente se o objeto a ser removido for o FIM ou o INICIO
	if(objParaRemover.lbVariavel.text == 'Inicio'){
		x1 = 1;
	}else{
		x1 = 2;
	}
}

Aliás... já que o x1 só aceita 2 valores, bem q podia ser uma variável booleana, não? Dessa forma, o que pode acontecer é trocar a ordem caso os dois objetos sejam removidos em determinada ordem, fazendo com que nessa situação o Fim seja inserido antes do Inicio. Você poderia trabalhar com duas variáveis booleanas (uma pra indicar a presença do Inicio, e outra a presença do Fim) e ajeitar isso.

 

tenha atenção, pois no seu código há partes confusas e não-otimizadas, e algumas bem estranhas o_O

 

Quanto à reta... você precisa indicar quais são os objetos que serão ligados né? aí é só usar as posições dele no palco.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou valeu. não tinha pensado nisso deixa eu te pergunta ? outra coisa se por acaso eu criar um movie clip um traço, como eu poderia fazer ele se alongar ou diminuir de tamanho dinamicamente ou seja quando a pessoa quisesse e outra duvida gostaria de saber se existe alguma função que faz solda com outro movie clip ou seja e eu encostar um movie clipe no outro ele se colam existe alguma função que possa fazer isso, tipo no flash quando os objetos sao da mesma cor eles colam, existe alguma função que faça isso no actionscript 3.

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.