haunter 0 Denunciar post Postado Maio 29, 2012 Olá, sou novo aqui no fórum e estou desenvolvendo uma animação em flash sobre segmentação de memória. Decidi fazer OO, mas estou tendo alguns problemas na criação de classes: package { import flash.display.MovieClip; import flash.geom.Rectangle; import flash.display.Shape; public class Segmento extends MovieClip { var prioridade:uint; var retangulo:Shape; public function Segmento(pontoX:uint, pontoY:uint) { this.retangulo = new Shape(); this.retangulo.graphics.beginFill(Math.random() * 0xFFFFFF, 1); this.retangulo.graphics.drawRect(pontoX, pontoY, 100, (10 * (int) (4 + (Math.random() * 5)))); this.retangulo.graphics.endFill(); this.prioridade = ((int) (Math.random() * 5)); } } } Criei esta classe para mais tarde, instânciar os segmentos (pequenos retangulos de altura e cor aleatorio) para que possam ser movimentados por meio de um objeto Tween. Mas um dos meu problemas é que aparece um erro quando vou executar: ArgumentError: Error #1063: Incompatibilidade de contagem do argumento Segmento(). Esperado 2, obtido 0. Sendo que eu nem instaciei esta classe Segmento. Outra dúvida é como eu faria para colocar um texto no meio de um segmento como mostrado na imagem abaixo: Obrigado a todos que puder me ajudar. Compartilhar este post Link para o post Compartilhar em outros sites
carneirinho 7 Denunciar post Postado Maio 29, 2012 Você criou um construtor na sua classe que recebe dois parametros, então o erro que está acontecendo é que você precisa mandar os dois parametros de x e y para que ele execute o script, ficando assim a chamada: var mc: Segmento = new Segmento([color="#FF0000"]100[/color],[color="#FF0000"]100[/color]); addChild(mc); O que você pode fazer tambem é definir um parametro padrão pro construtor, assim se nada for passado, ele ja tem um valor padrão, como no exemplo: public function Segmento(pontoX:uint = 0, pontoY:uint = 0) Assim se chamar somente como new Segmento(); seria o mesmo que chamar como new Segmento(0, 0); Por fim, você tambem esqueceu de dar um addChild do retangulo dentro da classe após o endFill();, para que você veja o retangulo na tela você precisa colocar um addChild(retangulo); abaixo de this.prioridade. Para colocar um campo de texto, use a classe TextField. Compartilhar este post Link para o post Compartilhar em outros sites
haunter 0 Denunciar post Postado Maio 30, 2012 @carneirinho - Obrigado por responder, o estranho é que eu não criei um objeto no ActionScript da classe Segmento. Como ele da esse erro se eu nem o instanciei? E mais uma dúvida, tem algum comando para que eu possa centralizar o TextField dentro de cada objeto segmento? Compartilhar este post Link para o post Compartilhar em outros sites
carneirinho 7 Denunciar post Postado Maio 30, 2012 Pode ser que o erro venha de outro pacote então. Sobre a centralização, você pode criar um texto com a largura toda do movieclip e setar o alinhamento dele ao centro, ou se quiser deixar o textfield com autoSize, dai você pode centralizar usando propriedades de x e width Compartilhar este post Link para o post Compartilhar em outros sites
haunter 0 Denunciar post Postado Maio 30, 2012 Não sei se estou errado, mas não tem alguma classe do tipo Label? Não conheço bem o flash, mas para mim TextField não seria campo para entrada de texto? Compartilhar este post Link para o post Compartilhar em outros sites
carneirinho 7 Denunciar post Postado Maio 30, 2012 label no flash é rótulo, é como uma instancia de um certo ponto da timeline. textfield é para qquer tipo de texto, tanto dinamico como de entrada. Compartilhar este post Link para o post Compartilhar em outros sites
haunter 0 Denunciar post Postado Maio 31, 2012 Hmm, ok. Vou tentar usar label, pois parece que é o mais viável, mas da pra configurar da mesma maneira que o TextField? Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Maio 31, 2012 O label(ou rótulo) que o carneirinho se referiu é uma 'marcação' na timeline. Por exemplo, você pode usar: mc.gotoAndPlay(10); ou, criar uma animação que inicie a partir do frame 10 e definir um 'nome' qualquer, no painel Properties, isso cria um ícone com uma banderinha vermelha no frame. Então, você pode chamar o mesmo frame que contém o início da animação pelo nome do label (como uma String, entre aspas): mc.gotoAndPlay("anima"); Há também o componente nativo do Flash, menu Window > Components > Label. Particularmente, não aprecio usar componentes. ... mas no seu caso, até onde meu conhecimento alcance, é melhor mesmo trabalhar com a classe TextField criado pelo Action. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
haunter 0 Denunciar post Postado Junho 1, 2012 @Elektra - Ata obrigado, não imaginava que era isso que o carneirinho queria dizer. Mas agora ficou claro a utilização da label no flash, diferentemente do componente label. Vou seguir as dicas que você e o carneirinho me deram. Obridado pela ajuda de vocês. Mas com certeza terei outros problemas no decorrer do meu trabalho. Compartilhar este post Link para o post Compartilhar em outros sites
haunter 0 Denunciar post Postado Junho 3, 2012 Agora tenho dúvidas quanto a esses erros: Scene 1, Layer 'Layer 1', Frame 1, Line 1 1172: Definition Segmentos:Segmento could not be found. Scene 1, Layer 'Layer 1', Frame 1, Line 1 1172: Definition Segmentos:Segmento could not be found. Scene 1, Layer 'Layer 1', Frame 1, Line 3 1137: Incorrect number of arguments. Expected no more than 0. O primeiro erro aparece duas vezes por isso eu o coloquei do jeito que apareceram quando eu executei. O código da classe Segmento: package Segmentos { import flash.display.MovieClip; import flash.geom.Rectangle; import flash.display.Shape; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class Segmento extends MovieClip { var prioridade:uint; var nomeRetangulo:TextField; var retangulo:Shape; public function Segmento(pontoX:uint, pontoY:uint, numeroSeg:uint) { this.retangulo = new Shape(); configureLabel(); this.retangulo.graphics.beginFill(Math.random() * 0xFFFFFF, 1); this.retangulo.graphics.drawRect(pontoX, pontoY, 100, (10 * (int) (4 + (Math.random() * 5)))); this.retangulo.graphics.endFill(); nomeRetangulo = new TextField(); nomeRetangulo.text = "Segmento " + numeroSeg + "\n" + "(" + (this.retangulo.height / 10) + "K)"; nomeRetangulo.autoSize = TextFieldAutoSize.CENTER; nomeRetangulo.x = this.retangulo.x; nomeRetangulo.width = this.retangulo.width; this.prioridade = ((int) (Math.random() * 5)); } } } Código do arquivo .fla: import Segmentos.Segmento; var seg:Segmento = new Segmento(10,10,10); addChild(seg); Compartilhar este post Link para o post Compartilhar em outros sites