Ir para conteúdo

POWERED BY:

Arquivado

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

Akroma

Duplicate + Drag AS3

Recommended Posts

Boa tarde.

 

Estou fazendo um editor de fotos ( a pessoa coloca a foto e pode colocar chapéu balãozinho e tudo mais em cima dela, para impressão depois).

A parte do drag eu consegui fazer, mas tem um problema quando eu clico no MC, ele tem que duplicar porque não pode ficar vazio o espaço dele no "menu".

 

 

já tentei de varias formas mas não consegui.

 

O drag eu faço assim

 

import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.events.Event;

       //Aqui coloca todos os MC's e a função do BTN
//Chapeus

chapeus_mc.chapeus_1.addEventListener(MouseEvent.MOUSE_DOWN,DragStart);
chapeus_mc.chapeus_1.addEventListener(MouseEvent.MOUSE_UP,DragStop);


       function DragStart(e:Event){

	trace("Drag Started!");
        e.target.startDrag(false);

}

function DragStop(e:Event){

	trace("Drag Stoped!");
	e.target.stopDrag();

}

 

Atenciosamente e desesperadamente.

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Elektra, obrigada pela ajuda.

 

Eu dei uma olhada na classe e tentei fazer mas ele duplicava errado

 

exemplo.jpg

 

O Código que eu fiz

 

	import flash.events.MouseEvent;
import flash.events.*;
import flash.display.*;
import flash.net.URLRequest;
import flash.display.BitmapData;

//Variaveis usadas
var btmp:Bitmap;
var bmd:BitmapData;


//Aqui coloca todos os MC's e a função do BTN
//Chapeus

chapeus_1.addEventListener(MouseEvent.MOUSE_DOWN,DragStart);
chapeus_1.addEventListener(MouseEvent.MOUSE_DOWN,carregou);
chapeus_1.addEventListener(MouseEvent.MOUSE_UP,DragStop);

//Funcçoes de clique
function DragStart(e:Event){

	trace("Drag Started!");

	//For more specific movieclip control use MovieClipname.startDrag(false);
	e.target.startDrag(false);


}

function DragStop(e:Event){

	trace("Drag Stoped!");

		//For more specific movieclip control use MovieClipname.startDrag(false);
		e.target.stopDrag();

}

//Função que duplica o clicado
function carregou(e:Event) {

       bmd = new BitmapData(this.width, this.height, false, 0x000000FF);
       bmd.draw(this);
       btmp = new Bitmap(bmd);

       btmp.y = this.y+this.height+10;
       btmp.x = this.x;

       addChild(btmp);

};

 

Como eu disse ( e está na imagem ) ele não duplica os mcs que já estão no stage e sim a imagem que vem de fora.

 

Desde já agradeço a ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu sugiro é o seguinte, ao clicar no MC você cria uma nova instância desse objeto, duplica ele, esse objeto duplicado é que deve ser arrastado. Os itens do menu devem ser utilizados unicamente para criar os objetos arrastáveis. Ou seja, ao clicar no MC principal deve ser criado e adicionado ao palco um novo objeto (igual ao clicado) porém esse possui propriedades diferentes, que permitem que seja arrastado de qualquer forma.

 

Isso fica mais fácil de entender quando se tem uma certa noção de OOP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu sugiro é o seguinte, ao clicar no MC você cria uma nova instância desse objeto, duplica ele, esse objeto duplicado é que deve ser arrastado. Os itens do menu devem ser utilizados unicamente para criar os objetos arrastáveis. Ou seja, ao clicar no MC principal deve ser criado e adicionado ao palco um novo objeto (igual ao clicado) porém esse possui propriedades diferentes, que permitem que seja arrastado de qualquer forma.

 

Isso fica mais fácil de entender quando se tem uma certa noção de OOP.

 

Foi exatamente isso que perguntei no inicio do tópico, eu não estou conseguindo fazer isso.

 

Ja tentei duplicar de tudo que é forma.

 

Bjus

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você está duplicando movie clipes para um drag fiz um exemplo simples, sem a classe BitmapData, mas penso que deve resolver para sua necessidade.

 

Posicionei a cópia a 10 pixels de distância em x e y, apenas para visualização, mas se quiser pode sobrepor.

 

Salvei para a versão CS4 >> http://rapidshare.com/files/453851453/doble_drag.rar

 

 

mc1.buttonMode = true;
var mc2 = new mclip();

mc1.addEventListener(MouseEvent.CLICK, duplicar, false, 0, true);

function duplicar(evt:MouseEvent):void
{
addChild(mc2);;
mc2.x = 10;
mc2.y = 10;
}

mc2.addEventListener(MouseEvent.MOUSE_DOWN, onMove, false, 0, true);
mc2.addEventListener(MouseEvent.MOUSE_UP, stopMove, false, 0, true);
mc2.buttonMode = true;


function onMove(evt:MouseEvent):void
{

mc2.startDrag();
}

function stopMove(evt:MouseEvent):void
{
mc2.stopDrag();
}

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você está duplicando movie clipes para um drag fiz um exemplo simples, sem a classe BitmapData, mas penso que deve resolver para sua necessidade.

 

Posicionei a cópia a 10 pixels de distância em x e y, apenas para visualização, mas se quiser pode sobrepor.

 

Salvei para a versão CS4 >> http://rapidshare.com/files/453851453/doble_drag.rar

 

 

Abraços

 

 

Muito obrigada :D

 

Vou adaptar e mudar para minha necessidade, e posto o final :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Surgiu um problema, toda vez que ele clicar no botão principal ele cria uma copia, só que eu não consigo selecionar a copia que quero, ele somente move a última criada.

 

var i:Number = 0;

var theMC = new myMC();

mc1.addEventListener(MouseEvent.CLICK, duplicar);

function duplicar(evt:MouseEvent):void
{

theMC = root["mcn" + i]
theMC = new myMC ();
theMC.x = 10;
theMC.y = 10;

addChild (theMC);

i++;


trace(theMC.name)




}

this.addEventListener(MouseEvent.MOUSE_DOWN, onMove);
this.addEventListener(MouseEvent.MOUSE_UP, stopMove);


function onMove(evt:MouseEvent):void
{

theMC.startDrag();
trace(theMC)
}

function stopMove(evt:MouseEvent):void
{
theMC.stopDrag();
}

 

Alguem pode me dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O drag vai ocorrer no objeto que foi adicionado por último à lista de exibição.

 

Basta criar uma função para alterar o índice com setChildIndex().

 

http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/flash/display/DisplayObjectContainer.html#setChildIndex()

 

 

Experimente assim:

 

 


this.addEventListener(MouseEvent.MOUSE_DOWN, onTop, false, 0, true);

function onTop(evt:MouseEvent):void
{
setChildIndex(MovieClip(evt.target), numChildren - 1);
}

 

 

 

Abraços

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.