Akroma 0 Denunciar post Postado Março 21, 2011 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
Elektra 102 Denunciar post Postado Março 22, 2011 Sugiro dê uma conferida sobre o uso da classe BitmapData e o método copyPixels. Aqui o link em português: http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/flash/display/BitmapData.html Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Akroma 0 Denunciar post Postado Março 22, 2011 Olá Elektra, obrigada pela ajuda. Eu dei uma olhada na classe e tentei fazer mas ele duplicava errado 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
Pedro Bartulihe 0 Denunciar post Postado Março 22, 2011 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
Akroma 0 Denunciar post Postado Março 22, 2011 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
Elektra 102 Denunciar post Postado Março 22, 2011 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
Akroma 0 Denunciar post Postado Março 22, 2011 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
Akroma 0 Denunciar post Postado Março 23, 2011 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
Elektra 102 Denunciar post Postado Março 25, 2011 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