Ir para conteúdo

Arquivado

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

Rariel

Como Apagar Cópias de MovieClips no Palco

Recommended Posts

PERGUNTA ?

 

GENTE TO COM UM PROBLEMAO ME AJUDEM POR FAVOR:

 

SEGUINTE: EU CRIEI UM BOTAO ONO USUARIO CLICA E APARECE UM NOVO OBJETO NO PALCO, CADA VEZ Q ELE CLICA APARECE UM OBJETO NOVO NO PALCO, EXEMPLO SE EU CLICAR 10 VEZES NO BOTAO DEZ COIAS DE UM MOVIECLIP VAO APARECER ..ATÉ AI TUDO BEM .

 

O QUE EU QUERO E O SEGUINTE : QUERIA UM OPÇÃO ONDE O USUARIO CLICASSE EM QUALQUER UMA DESSAS COPIAS AS SELECIONASSE E EXCLUISSE ESSA COPIA.

 

TIPO QUANDO você CRIAR UM QUADRADO NO PAINT POR EXEMPLO ONDE você PODE SELECIONAR ESSE QUADRADO E APAGAR ELE QUANDO QUISER.

 

SEGUE ABAIXO O CODIGO QUE FIZ NO BOTAO:

 

var obj:Object = this;

var ListaId:Array = new Array();

var cont:Number = -1;

 

 

//Cria um novo objeto retirando o original da Biblioteca

function CriaObjetos(evt:Event):void {

var objeto:iniciofim = new iniciofim();

ListaId[cont+=1] = objeto;

trace(ListaId[cont]);

//trace(cont);

obj.addChild(objeto);

obj = objeto;

obj.startDrag(true);

}

btniniciofim.addEventListener(MouseEvent.CLICK,CriaObjetos);

 

//Função para soltar o objeto no palco

function Solta(evt:MouseEvent):void {

 

obj.stopDrag();

}

stage.addEventListener(MouseEvent.MOUSE_UP,Solta);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rariel, bem vindo ao fórum.

 

antes de mais nada, recomendo que dê uma lida nas regras do forum. Especialmente onde fala para evitar o uso de caixa alta (todas as letras maiúsculas).

 

Também observar que você pode usar o BBCode para destacar o código que você posta. Basta colocar o código entre as tags code.

 

Tudo isso é pra facilitar a leitura, e por conseguinte, facilitar que mais pessoas leiam seu post e possam te ajudar =)

 

quanto a sua dúvida, você quer que assim que a pessoa clique sobre o MovieClip ele seja retirado do palco?

 

se for, essa linha dá uma bela complicada nas coisas:

 

obj = objeto;

por que na próxima vez que a função for executada, ele vai fazer isso:

 

obj.addChild(objeto);

ou seja, cada objeto que você adiciona ao palco, é filho do objeto adicionado anteriormente. É isso que você quer?

 

Acreditando eu que não seja, tomo a liberdade de retirar a linha que falei, e substituir o:

 

obj.startDrag(true);
por

objeto.startDrag(true);

assim, todos os objetos estarão no mesmo nível hierárquico.

 

também aconselho trocar o

 

ListaId[cont+=1] = objeto;
por

ListaId.push(objeto);

Da outra forma não impedia que funcionasse, mas dessa forma creio que fique melhor, e torna desnecessária a variável cont.

 

Aí não é difícil, primeiro, dentro da função CriaObjetos, e após instanciar o novo objeto, eu adiciono um listener de click a ele:

 

objeto.addEventListener(MouseEvent.CLICK, removeObjeto);

e dentro dessa função removeObjeto, eu removo o objeto clicado do Array e do palco:

 

function removeObjeto(e:MouseEvent):void{
	for(var ob in ListaId){
		if(e.currentTarget == ListaId[ob]){
			ListaId.splice(ob, 1);
		}
	}
	removeChild(DisplayObject(e.currentTarget));
}

mais ou menos por aí =)

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rariel, bem vindo ao fórum.

 

antes de mais nada, recomendo que dê uma lida nas regras do forum. Especialmente onde fala para evitar o uso de caixa alta (todas as letras maiúsculas).

 

Também observar que você pode usar o BBCode para destacar o código que você posta. Basta colocar o código entre as tags code.

 

Tudo isso é pra facilitar a leitura, e por conseguinte, facilitar que mais pessoas leiam seu post e possam te ajudar =)

 

quanto a sua dúvida, você quer que assim que a pessoa clique sobre o MovieClip ele seja retirado do palco?

 

se for, essa linha dá uma bela complicada nas coisas:

 

obj = objeto;

por que na próxima vez que a função for executada, ele vai fazer isso:

 

obj.addChild(objeto);

ou seja, cada objeto que você adiciona ao palco, é filho do objeto adicionado anteriormente. É isso que você quer?

 

Acreditando eu que não seja, tomo a liberdade de retirar a linha que falei, e substituir o:

 

obj.startDrag(true);
por

objeto.startDrag(true);

assim, todos os objetos estarão no mesmo nível hierárquico.

 

também aconselho trocar o

 

ListaId[cont+=1] = objeto;
por

ListaId.push(objeto);

Da outra forma não impedia que funcionasse, mas dessa forma creio que fique melhor, e torna desnecessária a variável cont.

 

Aí não é difícil, primeiro, dentro da função CriaObjetos, e após instanciar o novo objeto, eu adiciono um listener de click a ele:

 

objeto.addEventListener(MouseEvent.CLICK, removeObjeto);

e dentro dessa função removeObjeto, eu removo o objeto clicado do Array e do palco:

 

function removeObjeto(e:MouseEvent):void{
	for(var ob in ListaId){
		if(e.currentTarget == ListaId[ob]){
			ListaId.splice(ob, 1);
		}
	}
	removeChild(DisplayObject(e.currentTarget));
}

mais ou menos por aí =)

 

[]'s

 

Por favor me desculpe é por que sou novo aqui no furum.

 

Sua dica valeu. mas eu gostaria de saber como eu posso fazer qualquer objeto no palco se mover e ao seleciona-lo excluir. gostaria de função onde eu podesse selecionar qualquer filho criado e pode-lo movelo mais de um mesmo depois de soltalo no palco e pode-lo exclui-lo tambem.

 

 

vou descrever o que estou fazendo:

 

eu tenho um menu com botoes certo, quando eu clico no botão eu crio um novo objeto e solto ele em qualquer lugar, se eu clicar novamente criarei um novo objeto e arrasto ele para outro ponto do palco, o problema é que quando eu solto o objeto nao consigo movelo novamente, e eu gostaria de que esses objetos que foram criados e soltos no palco podessem ser movidos quando o usuario clicar em cima dele(s) e alem de poderem ser movidos gostaria queo usuario podesse seleciona-lo com poteiro no mouse e deleta-lo atraves de um botao chamado delete.

 

 

Vamos pegar como exemplo o proprio Flash, se eu quero fazer um quadrado no palco eu clico no botao quadrado e desenho ele no palco certo, e quando eu desenho ele no palco eu movelo para qualquer posição quando eu o seleciono, além de pode-lo deleta-lo quando eu quiser. é isso que queria fazer, porém claro nao quero desenhar pois quando eu clico o objeto ja aparece porem gostaria de poder movelos a qualquer hora e excluir a apenas aquele objeto selecionado.

 

Desculpa pelo texto grande mas eu quis expecificar detalhadamente o que eu preciso fazer segue abaixo novamente o codigo que fiz.

 

var obj:Object = this;
var ListaId:Array = new Array();
var cont:Number = -1;


//Cria um novo objeto retirando o original da Biblioteca
function CriaObjetos(evt:Event):void {
var objeto:iniciofim = new iniciofim();
ListaId[cont+=1] = objeto;
trace(ListaId[cont]);
//trace(cont);
obj.addChild(objeto);
obj = objeto;
obj.startDrag(true);
}
btniniciofim.addEventListener(MouseEvent.CLICK,CriaObjetos);

//Função para soltar o objeto no palco
function Solta(evt:MouseEvent):void {

obj.stopDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP,Solta);

Olá desculpe te encher o saco de novo eu fiz as linhas de codigo que falou mas ainda nao consigo remover os objetos do palco quando eu clico

var obj:Object = this;
var ListaId:Array = new Array();
//var cont:Number = -1;

//Cria um novo objeto retirando o original da Biblioteca
function CriaObjetos(evt:Event):void {
	var objeto:iniciofim = new iniciofim();
	ListaId.push(objeto); 
	trace(ListaId);
	//trace(cont);
	obj.addChild(objeto);
	objeto.startDrag(true);
	objeto.addEventListener(MouseEvent.CLICK, removeObjeto);	
}
btniniciofim.addEventListener(MouseEvent.CLICK,CriaObjetos);

//Função para soltar o objeto no palco
function Solta(evt:MouseEvent):void {
	obj.stopDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP,Solta);


function removeObjeto(e:MouseEvent):void{
        for(var ob in ListaId){
                if(e.currentTarget == ListaId[ob]){
                        ListaId.splice(ob, 1);
                }
        }
        removeChild(DisplayObject(e.currentTarget));
};

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Rariel,

 

olha só, ficar postando sua dúvida em tudo quanto é tópico e áreas do fórum não vai te ajudar. Só uma dica tá?

 

quanto ao problema, você está com a faca e o queijo na mão =)

 

Para o efeito de arrastar, você põe um eventListener para o MOUSE_DOWN do mouse nos objetos, que nem eu fiz para o remove, só que você pode chamar outra função, e dentro dela, você chama o método startDrag para o objeto (que você vai pegar usando o currentTarget).

 

Não esquece de adicionar um eventListener para o MOUSE_UP, e dar um stopDrag, para soltar o objeto.

 

Quanto a seleção, você pode criar uma variável para guardar qual dos objetos está selecionado. No evento de clique você aponta essa variável para o objeto que foi clicado (currentTarget denovo).

 

Aí você verifica o evento KeyDown no palco para a tecla delete, e quando ele ocorrer, você remove do palco o objeto que está atualmente naquela variável que guarda o selecionado.

 

Agora, olho na documentação: http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/index.html

 

e mãos à obra!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu de Novo Deu certo fiz algumas modificações aqui: eu crie um movie clip chamado borracha e atraves dele consigo deleta-lo, porem tive que usar uma funçã dentro da outra mas ainda nao saquei como fazer cada objeto novo inserido ficar movel no palco o tempo todo ou seja quando eu clicar neles eu poder arrastar e soltar em qualquer lugar.

 

Desculpa eu te encher o saco. mas você foi o unico que mandou um dica que me ajudo se você poder me dar so mais essa ajudinha .

 

segue em anexo o novo codigo:

var obj:Object = this;
var ListaId:Array = new Array();

//Cria um novo objeto retirando o original da Biblioteca
function CriaObjetos(evt:Event):void {
	var objeto:iniciofim = new iniciofim();
	ListaId.push(objeto); 
	addChild(objeto);
	objeto.startDrag(true);
	
	//Pega borracha para deletar o objeto
	function BorrachaPega(evt:MouseEvent):void{
	   mcborracha.startDrag(true);
	   objeto.addEventListener(MouseEvent.MOUSE_OUT, removeObjeto);	
    };
    mcborracha.addEventListener(MouseEvent.CLICK,BorrachaPega);
};
btniniciofim.addEventListener(MouseEvent.MOUSE_DOWN,CriaObjetos);

//Função para soltar o objeto no palco
function Solta(evt:MouseEvent):void {
	obj.stopDrag();
};
stage.addEventListener(MouseEvent.MOUSE_UP,Solta);

// Função remove o objeto do Palco
function removeObjeto(e:MouseEvent):void{
        for(var ob in ListaId){
                if(e.currentTarget == ListaId[ob]){
                        ListaId.splice(ob, 1);
                }
        }
        removeChild(DisplayObject(e.currentTarget));
};

mcborracha.addEventListener(MouseEvent.CLICK,BorrachaPega);

Por favor se puder da uma olhada na ultima função estou aproveitando aquela função q você me mandou para remover, eu apenas mudei seu nome, porem nao estou comseguindo pegar os objetos criados no palco, acredito q o erro deva estar nessa linha,

e.currentTarget.startDrag(true);
, segue o restane do codigo abaixo:

 

var obj:Object = this;
var ListaId:Array = new Array();

//Cria um novo objeto retirando o original da Biblioteca
function CriaObjetos(evt:Event):void {
	var objeto:iniciofim = new iniciofim();
	ListaId.push(objeto); 
	addChild(objeto);
	objeto.startDrag(true);
	objeto.addEventListener(MouseEvent.MOUSE_DOWN,PegaObjeto );
	//Pega borracha para deletar o objeto
	function BorrachaPega(evt:MouseEvent):void{
	   mcborracha.startDrag(true);
	   objeto.addEventListener(MouseEvent.MOUSE_OUT, removeObjeto);	
    };
    mcborracha.addEventListener(MouseEvent.CLICK,BorrachaPega);
};
btniniciofim.addEventListener(MouseEvent.MOUSE_DOWN,CriaObjetos);

//Função para soltar o objeto no palco
function Solta(evt:MouseEvent):void {
	obj.stopDrag();
};
stage.addEventListener(MouseEvent.MOUSE_UP,Solta);

// Função remove o objeto do Palco
function removeObjeto(e:MouseEvent):void{
        for(var ob in ListaId){
                if(e.currentTarget == ListaId[ob]){
                        ListaId.splice(ob, 1);
                }
        }
        removeChild(DisplayObject(e.currentTarget));
};

function BorrachaPega(evt:MouseEvent):void{
	mcborracha.startDrag(true);
}
mcborracha.addEventListener(MouseEvent.CLICK,BorrachaPega);

function PegaObjeto(e:MouseEvent):void{
        for(var ob in ListaId){
                if(e.currentTarget == ListaId[ob]){
                        ListaId.splice(ob, 1);
                }
        }
       e.currentTarget.startDrag(true);
};

E a ai beleza, ta funcionando, to so com pequeno probleminha e que quando eu insiro os objetos no palco eu so consigo fazer eles se moverem quando novamente quando eu uso os seguintes eventos,

MOUSE_OUT, MOUSE_MOVE, MOUSE_OVER
, ou seja apenas quando eu passo o ponteiro so mouse em cima de cada um, quando eu uso os outros eventos como:
CLICK, MOUSE_DOWN, Mouse_UP
, nao consigo fazer esses objetos se moverem novamente ao clicar: se você tiver alguma sugestão sei que é pedir de mais, mas quando tiver um tempinho: segue o codigo,

var obj:Object = this;
var ListaId:Array = new Array();

//Cria um novo objeto retirando o original da Biblioteca
function CriaObjetos(evt:Event):void {
	var objeto:iniciofim = new iniciofim();
	ListaId.push(objeto); 
	addChild(objeto);
	objeto.startDrag(true);
	objeto.addEventListener(MouseEvent.MOUSE_UP,PegaObjeto);
	
	//Pega borracha para deletar o objeto
	function BorrachaPega(evt:MouseEvent):void{
	   mcborracha.startDrag(true);
	   objeto.addEventListener(MouseEvent.MOUSE_OUT, removeObjeto);	
    };
    mcborracha.addEventListener(MouseEvent.CLICK,BorrachaPega);
};
btniniciofim.addEventListener(MouseEvent.CLICK,CriaObjetos);

//Função para soltar o objeto no palco
function Solta(evt:MouseEvent):void {
	obj.stopDrag();
};
stage.addEventListener(MouseEvent.MOUSE_UP,Solta);

// Função remove o objeto do Palco
function removeObjeto(e:MouseEvent):void{
      
		for(var ob in ListaId){
                if(e.currentTarget == ListaId[ob]){
                        ListaId.splice(ob, 1);
                }
        }
        removeChild(DisplayObject(e.currentTarget));
};

function BorrachaPega(evt:MouseEvent):void{
	mcborracha.startDrag(true);
}
mcborracha.addEventListener(MouseEvent.CLICK,BorrachaPega);

function PegaObjeto(e:MouseEvent):void{
        for(var ob in ListaId){
                if(e.currentTarget == ListaId[ob]){
                        ListaId.splice(ob, 1);
                }
        }
       e.currentTarget.startDrag(true);
};

Mas desde já valeu mesmo , muito obrigado pelas ajudas anteriores...valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa dar uma analisada no seu código, está bem confuso.

 

Aconselho você a analisar bem seu código, e planejar o que vai fazer... um papel as vezes ajuda.

Só depois você passa pro código. Etente fazer por partes, e ir comentando cada parte para não se perder... umas dicas:

 

- Primeiro a parte onde você adiciona os objetos no palco (adicionando no array). Está ok?

- Dentro da função onde eles são adicionados, coloca um evenListener de MOUSE_DOWN no objeto, chamando a função que vai chamar o startDrag nele (com currentTarget);

- Dentro da função do startDrag, é que você vai adicionar um evento MOUSE_UP ao objeto clicado atualmente, chamando uma função que dê um stopDrag, e remova este próprio evento, usando o removeEventListener.

 

Agora a parte da borracha, é separada da criação dos objetos...

 

- Insira um eventListener nela para uma função que chame startDrag (MOUSE_DOWN, da mesma forma do objeto . Da mesma forma para o stopDrag(MOUSE_UP). E crie uma variável, que guarde se a borracha está ativa ou não.

- Agora lá nos objetos, na função que os cria você adiciona um eventListener de clique neles, e nessa função você verifica o estado da borracha (ativa ou não), e remove os objetos ou não de acordo com isso...

 

E você colocou isso em tantas partes do fórum, que eu quase não encontro x_x

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha eu te enchendo o saco de novo, dei um modificada no codigo tava realmente confuso, mas as dicas que você me deu da pra aplicar nesse codi tambem, porem agora nao consigo mover os objetos quando eu eu aperto o botao seleção, nao sei se fiz certo, como você falou. e o pior tem um problema agora quano eu clico no botao seleção eu consigo arrastar os objetos normalmente, o problema e a borracha, na hora de deletar nao congigo deletar se eu tiver clicado anteriormente no botao de seleção, os objetos continuam sendo arrastaveis e isso nao pode acontercer os objtos so podem ser arrastaveis se eu clicar no botao seleção e quando clicar no botao borracha eles nao podem mais ser arrastaveis. outro problema é quando uso o evento MOUSE_DOWN eu nao consigo arrastar os objetos criados, apenas quando uso MOUSE_OUT, MOUSE_OVER ou MOUSE_MOVE

 

//Objetos e variaveis Globais
var obj:Object = this;
var ListaId:Array = new Array();
var bor:mcBorracha = new mcBorracha();


// Função remove o objeto do Palco quando a borracha e acionada no botao
function removeObjeto(e:MouseEvent):void {
	for (var ob in ListaId) {
		if (e.currentTarget == ListaId[ob]) {
			ListaId.splice(ob, 1);
		}
	}
	removeChild(DisplayObject(e.currentTarget));
	
}

//Função para pegar Objetos e arrastar no palco
function Selecao(e:MouseEvent):void {
	for (var ob in ListaId) {
		if (e.currentTarget == ListaId[ob]) {
			ListaId.splice(ob, 1);
		}
	}
	e.currentTarget.startDrag(true);
	e.currentTarget.addEventListener(MouseEvent.MOUSE_UP,Solta);
	stage.removeEventListener(MouseEvent.MOUSE_UP,Solta);
}

//Função para soltar o objeto no palco
function Solta(evt:MouseEvent):void {
	stopDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP,Solta);


//Função para selecionar objeto e passar eles para a função selecao
function CorreMatrizSelecao(e:MouseEvent):void {
	for (var x:Number = 0; x < ListaId.length; x++) {
		this.ListaId[x].addEventListener(MouseEvent.~, Selecao);
	}
}
btnSelecao.addEventListener(MouseEvent.CLICK, CorreMatrizSelecao);

//Função para percorrer a matriz e apagar elemento
function CorreMatrizApaga(e:MouseEvent):void {
	for (var x:Number = 0; x < ListaId.length; x++) {
		ListaId[x].addEventListener(MouseEvent.MOUSE_OVER, removeObjeto);
	}
	addChild(bor);
	bor.startDrag(true);

}
btnBorracha.addEventListener(MouseEvent.CLICK, CorreMatrizApaga);



//Função para criar novos objetos assim quer for clicado no botao btninicio-fim.
function CriaObjetos(evt:MouseEvent):void {
	var objeto:mcIniciofim = new mcIniciofim();
	ListaId.push(objeto);
	addChild(objeto);
	objeto.startDrag(true);
}
btniniciofim.addEventListener(MouseEvent.CLICK, CriaObjetos);

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.