Ir para conteúdo
Fórum Script Brasil
  • 0

AS3 - Duplicar MovieClip


kafunga

Pergunta

6 respostass a esta questão

Posts Recomendados

  • 0

Mano, ainda não estou conseguindo usar, pode me ajudar? Olha como estou fazendo:

A classe que me passou está assim:

package com.senocular.displey {
    
    import flash.display.DisplayObject;
    import flash.geom.Rectangle;
    
    /**
     * duplicateDisplayObject
     * creates a duplicate of the DisplayObject passed.
     * similar to duplicateMovieClip in AVM1. If using Flash 9, make sure
     * you export for ActionScript the symbol you are duplicating
     * @param target the display object to duplicate
     * @param autoAdd if true, adds the duplicate to the display list
     * in which target was located
     * @return a duplicate instance of target
     */
    public function duplicateDisplayObject(target:DisplayObject, autoAdd:Boolean = false):DisplayObject {
        var targetClass:Class = Object(target).constructor;
        var duplicate:DisplayObject = new targetClass() as DisplayObject;
        
        // duplicate properties
        duplicate.transform = target.transform;
        duplicate.filters = target.filters;
        duplicate.cacheAsBitmap = target.cacheAsBitmap;
        duplicate.opaqueBackground = target.opaqueBackground;
        if (target.scale9Grid) {
            var rect:Rectangle = target.scale9Grid;
            // Flash 9 bug where returned scale9Grid is 20x larger than assigned
            rect.x /= 20, rect.y /= 20, rect.width /= 20, rect.height /= 20;
            duplicate.scale9Grid = rect;
        }
        
        // add to target parent's display list
        // if autoAdd was provided as true
        if (autoAdd && target.parent) {
            target.parent.addChild(duplicate);
        }
        return duplicate;
    }
}
E estou tentando utilizar assim:
// Controla Tiros
function atira (mou:MouseEvent){
    
    numTiros++;
    var Tirao:DisplayObject = new DisplayObject();
    Tirao.duplicateDisplayObject(tiro,false);
    
    addChild(Tirao);
    Tirao.x = 20;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Em meu teste o duplicateDisplayObject só funcionou com loader apenas, no seu caso poder importar um MC direto da Library como uma classe...

Pro exemplo você cria um MC e ele fica na library, nas propriedades de linkage selecione "Export for ActionScript" e "Export in first frame", coloque um nome em Class, por exemplo "MyClass"... deixe em Base Class "flash.display.MovieClip"...

Agora no Editor de action coloque:

import flash.display.*

var t1 = new MyClass();
this.addChild( t1 );

var t2 = new MyClass();
t2.x = 200;
this.addChild( t2 );

isso pode ser colocado dentro de uma função chamada de um MouseEvent

Link para o comentário
Compartilhar em outros sites

  • 0

package com.senocular.display {
    
    import flash.display.DisplayObject;
    import flash.geom.Rectangle;
    import flash.system.Capabilities; // version check for scale9Grid bug
    
    /**
     * duplicateDisplayObject
     * creates a duplicate of the DisplayObject passed.
     * similar to duplicateMovieClip in AVM1. If using Flash 9, make sure
     * you export for ActionScript the symbol you are duplicating
     * @param target the display object to duplicate
     * @param autoAdd if true, adds the duplicate to the display list
     * in which target was located
     * @return a duplicate instance of target
     */
    public function duplicateDisplayObject(target:DisplayObject, autoAdd:Boolean = false):DisplayObject {
        var targetClass:Class = Object(target).constructor;
        var duplicate:DisplayObject = new targetClass() as DisplayObject;
        
        // duplicate properties
        duplicate.transform = target.transform;
        duplicate.filters = target.filters;
        duplicate.cacheAsBitmap = target.cacheAsBitmap;
        duplicate.opaqueBackground = target.opaqueBackground;
        if (target.scale9Grid) {
            var rect:Rectangle = target.scale9Grid;
            
            if (Capabilities.version.split(" ")[1] == "9,0,16,0"){
                // Flash 9 bug where returned scale9Grid as twips
                rect.x /= 20, rect.y /= 20, rect.width /= 20, rect.height /= 20;
            }
            
            duplicate.scale9Grid = rect;
        }
        
        // Flash 10 only
        // duplicate.graphics.copyFrom(target.graphics);
        
        // add to target parent's display list
        // if autoAdd was provided as true
        if (autoAdd && target.parent) {
            target.parent.addChild(duplicate);
        }
        return duplicate;
    }
}
Eu peguei apenas a função
function duplicateDisplayObject(target:DisplayObject, autoAdd:Boolean = false):DisplayObject {
        var targetClass:Class = Object(target).constructor;
        var duplicate:DisplayObject = new targetClass() as DisplayObject;
        
        // duplicate properties
        duplicate.transform = target.transform;
        duplicate.filters = target.filters;
        duplicate.cacheAsBitmap = target.cacheAsBitmap;
        duplicate.opaqueBackground = target.opaqueBackground;
        if (target.scale9Grid) {
            var rect:Rectangle = target.scale9Grid;
            
            if (Capabilities.version.split(" ")[1] == "9,0,16,0"){
                // Flash 9 bug where returned scale9Grid as twips
                rect.x /= 20, rect.y /= 20, rect.width /= 20, rect.height /= 20;
            }
            
            duplicate.scale9Grid = rect;
        }
        
        // Flash 10 only
        // duplicate.graphics.copyFrom(target.graphics);
        
        // add to target parent's display list
        // if autoAdd was provided as true
        if (autoAdd && target.parent) {
            target.parent.addChild(duplicate);
        }
        return duplicate;
    }
e apliquei como:
var qualquerCoisa:QualquerClasse = new QualquerClasse(args[]);

var copia:DisplayObject = Duplicate(qualquerCoisa,true);


//a partir daqui você pode usar o DO copia que vai ser exatamente como qualquerCoisa caso precise de algum atributo adicional copiado como Name etc... é so alterar a função que diz "duplicate.Atributo = target.Atributo" e você tera o que quiser copiado =_=...

simples

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...