Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Atualmente obtenho o índice ao carregar os objetos do Array.
Preciso verificar se todas as instâncias executaram a Tween para depois chamar uma nova função.
O contador funciona, desde que o movimento do mouse sobre os mcs seja lento, ou seja, inadequado.
Não estou sabendo como obter o índice ou name do objeto com MOUSE_OVER em um Grid.
Penso que seja necessário identificar se todos os objetos do Array chamaram a Tween, e no total, vigésimo, utilizar MOTION_FINISH para chamar outra função.
Agradeço alguma orientação.
import flash.display.MovieClip;
import flash.events.MouseEvent;
import com.greensock.TweenMax;
stop();
var cont:uint = 0;
var boxs:Array = new Array();
for (var i:int =0; i<4; i++){
for (var j:int =0; j<5; j++){
var box:MyMovie= new MyMovie();
addChild(box);
box.x = i * 70;
box.y = j * 70;
box.buttonMode = true;
boxs.push(box);
trace(boxs.indexOf(box) + 1);
box.addEventListener(MouseEvent.MOUSE_OVER, anima);
}
}
function anima(e:MouseEvent):void {
var boxGrid = e.target as MovieClip;
TweenMax.to(boxGrid, .5,{autoAlpha: 0});
cont++;
trace(cont);
if(cont == 20){
gotoAndStop(2);
}
}
Abraços
Obrigada Eder, já tinha feito isso (removi ao postar) mas não resolve.
Na verdade usei:
box.removeEventListener(MouseEvent.MOUSE_OVER, anima);
Mesmo lentamente, deixa um mc na tela (inferior, à direita).
Arquivo com o 'remove' >> Clique aqui
Já pensei em remover o listener ao chamar a Tween, e devolver com onComplete, mas talvez fique lento. Nesse caso, acho que dava pra dispensar o contador. O autoAlpha é pra facilitar, provisório.
Menos que .5 deixa a transição dura.
Por isso tento descobrir outra forma de verificação, gostaria de usar este grid como uma máscara.
Chamar o frame 2 é apenas em um arquivo de teste.
Abraços
A forma correta usando OO seria assim (eu usaria hasmap e pode ser um tanto mais trabalhosa):
public class MyMovie extends MovieClip{
public var done:boolean = false;
[...]
}
function anima(e:MouseEvent):void {
var boxName = (e.target as MyMovie).name;
var boxGrid:MyMovie = boxMap.get(boxName);
boxGrid.done = true;
boxGrid.removeEventListener(MouseEvent.MOUSE_OVER, anima);
TweenMax.to(boxGrid, .5,{autoAlpha: 0});
boxMap.put(boxGrid.name,boxGrid);
checkGrid();
}
function checkGrid():void{
var allDone:boolean = true;
for(tempBoxName:String in boxMap.keyset){
if(!boxMap.get(tempBoxName).done){
allDone = false;
}
}
if(allDone){
{
gotoAndStop(2);
}
}
Eu soh nao lembro se era mesmo obrigatório atualizar o item do hashmap rsrs
Oi Elecktra]
realmente, add o listenner antes do tween e remover depois ficaria bem ruim,
assim com contador já esta bom
estranho mesmo o quadrado ficar ali embaixo, e sempre acontece depois que ele foi para o segundo frame,
tenta fazer o seguinte, troca o MOUSE_OVER por ROLL_OVER
[]´s
@ Irineu
Se você se enrolou, imagina eu. Não domino action, e sei o básico de OOP. :lol:
Estou estudando, tenho muito chão pela frente.
Não precisa ser algo perfeito, mas faço questão de compreender o que estou fazendo.
Obrigada pela atenção assim mesmo.
@ Eder
Testei com o ROLL_OVER, no add e remove Listener, deu na mesma.
O quadrado malvado só é removido se for o primeiro a ser acionado.
O contador não resolve.
Tenho exemplo de adicionar um 'name' para os objetos de um menu com um for.
for(var i:uint = 0; i < btnNum; i++){
btn = new Btn();
btn.name = "button" + (i + 1);
...
}
function onTraceName(evt:MouseEvent):void {
trace(evt.target.name);
}
Em um Array com imagens posso recuperar a url.
Mas não sei como fazer isso com um for dentro de outro for para montar o grid usando instâncias.
Esse é o 'ó' do borogodó.
Pode haver outra forma mais adequada, mas foi o que me ocorreu para obter a validação, identificar pelo índice ou name dos objetos se todos executaram a Tween.
Como é que eu vou fazer isso já são outros 500 (... largo a bomba pro Irineu) ahahahhhh :grin:
Com esse código que você está usando até dá pra fazer, mas só por meio de gambiarras... Isso se, através da sua classe, não for possível você monitorar o alpha do MC no momento em que o efeito for aplicado...
>
...
Mas não sei como fazer isso com um for dentro de outro for para montar o grid usando instâncias.
Esse é o 'ó' do borogodó.
Se for mesmo basta adicionar mais uma variável para te auxiliar na atribuição de nome aos mcs...
Ex.:
var cont:uint = 0;
var boxs:Array = new Array();
var aux:int = 0;
for (var i:int =0; i<4; i++){
for (var j:int = 0; j<5; j++){
var box:MyMovie= new MyMovie();
box.name = "meuMc"+aux;
aux++;
addChild(box);
box.x = i * 70;
box.y = j * 70;
box.buttonMode = true;
boxs.push(box);
box.addEventListener(MouseEvent.MOUSE_OVER, anima);
}
}
O que você quer, penso eu, seria +/- isso:
var cont:uint = 0;
var boxs:Array = new Array();
var aux:int = 0;
for (var i:int =0; i<4; i++){
for (var j:int = 0; j<5; j++){
var box:MyMovie= new MyMovie();
box.name = "meuMc"+aux;
aux++;
addChild(box);
box.x = i * 70;
box.y = j * 70;
box.buttonMode = true;
boxs.push(box);
box.addEventListener(MouseEvent.MOUSE_OVER, anima);
}
}
function anima(e:MouseEvent):void {
var boxGrid = e.target as MovieClip;
efeito( boxGrid );
// TweenMax.to(boxGrid, .5,{autoAlpha: 0});
cont++;
trace(boxGrid.name);
if(cont == 20){
trace("->"+cont);
}
}
function efeito( mc:MovieClip ){
mc.addEventListener( 'enterFrame', alphaFunc );
}
function alphaFunc( e:Event ){
if( e.target.alpha <= 0 ){
e.target.removeEventListener( "enterFrame", alphaFunc );
} else {//O segredo está aqui...
e.target.removeEventListener( MouseEvent.MOUSE_OVER, anima);
e.target.alpha -= 0.1;
}
}
Teste e conte-nos o resultado...
Bom feriadão, :)
Obrigada pela atenção Roger.
Bem, agora obtenho um 'name', mas penso que a intenção era mostrar em output a String 'meuMc' + o valor adicionado pela variável auxiliar.
O que visualizo é 'instance2', 'instance5' ... 'instance38', parece algo aleatório.
Se adiciono o 'gotoAndPlay(2)' entre as chaves do if, dá bug geral. Replica os mcs antes de remover todos.
if(cont == 20){
trace("->"+cont);
//gotoAndPlay(2);
}
Pelo que compreendi, você chamou a função 'efeito', definiu o parâmetro 'mc', e verifica se ainda ocorrerá a animação em 'alphaFunc'.
efeito( boxGrid );
function efeito( mc:MovieClip ){
mc.addEventListener( 'enterFrame', alphaFunc );
}
Meu conhecimento atual ainda não alcança essa forma resumida de declarar com uso de Strings. O trace idem. Vi 1 ou 2 codes assim, nunca usei.
Então, abusando bem pouquinho (100% Flash_lover :love: ), agradeço muito se puder 'traduzir'. Será realmente útil pra mim.
Quanto a variável auxiliar pensei em algo semelhante. Tinha imaginado criar um novo Array vazio e popular com os 'names' ou 'índices' obtidos pelo mouse_over, e verificar se atingiam o valor '20', ou talvez, igualar ao Array inicial, só não sabia como.
Vou estudar sua sugestão, certamente é o caminho. Nada urgente, isso é idéia que alimento há algum tempo, eu chego lá.
Furungando, pesquisando, ralando um bocado e atormentando as orelhas dos amigos mais experientes, sempre se aprende.
Abraços :grin:
Excelente feriado pra você também.
>
Obrigada pela atenção Roger.
Bem, agora obtenho um 'name', mas penso que a intenção era mostrar em output a String 'meuMc' + o valor adicionado pela variável auxiliar.
O que visualizo é 'instance2', 'instance5' ... 'instance38', parece algo aleatório.
Se você copiar o código que eu te passei, ele faz exatemente isso... Mas é aqui que você você pega o name do mc:
trace(boxGrid.name);
Pelo que compreendi, você chamou a função 'efeito', definiu o parâmetro 'mc', e verifica se ainda ocorrerá a animação em 'alphaFunc'.
Exatamente isso... Explicar, seria quase que repetir o que você falou :)
Só acrescentando, o que faz a diferença e que evita que o contador fique incrementando erradamente, foi, sempre que o mc disparar o evento 'MOUSE_OVER' eu remover o evento:
e.target.removeEventListener( MouseEvent.MOUSE_OVER, anima);
(existe outras formas também sem precisar remover o evento, mas não vejo necessidade...)
Quanto a variável auxiliar pensei em algo semelhante. Tinha imaginado criar um novo Array vazio e popular com os 'names' ou 'índices' obtidos pelo mouse_over, e verificar se atingiam o valor '20', ou talvez, igualar ao Array inicial, só não sabia como.
Da forma como você está querendo fazer, fica meio que como uma gambiarra... O ideal seria que sua classe possuisse um método para monitorar o efeito aplicado... Por isso que criei minha função personalizada para aplicar o tipo de efeito que eu desejar e poder ter controle sobre o efeito...
Tente novamente, como falei... Qualquer coisa é só falar...
Abs,
Buenas, digitei 'gotoAndPlay(2)'. Bugou né! Cansaço honesto, peço desculpas pela desatenção.
Foi simples de entender o uso das Strings no add/removeListener, obtive o 'box.name' ao carregar o grid, equivalente a >> trace(boxs.indexOf(box) + 1).
box.name = "meuMc"+ (aux + 1);
aux++;
trace(box.name); // output >> meuMc1...meuMc20
Por enquanto, a função alphaFunc tem comportamento idêntico ao code inicial, com 'cont == 20', sem o 'remove'.
Ainda não descobri como criar uma verificação para que o 'gotoAndStop(2)' seja executado somente depois que todos os objetos forem removidos do stage.
Nenhuma disposição para gambi ao pensar em outro Array, 'delírio' de quem está começando e nunca viu nada semelhante. (off: hoje pensei também no potencial do hitTest) GOD SAVE THE QUEEN!
Obrigada Roger, tô na luta (largar o osso??? ... nem pensar).
Abraços :grin:
>
Por enquanto, a função alphaFunc tem comportamento idêntico ao code inicial, com 'cont == 20', sem o 'remove'.
Ainda não descobri como criar uma verificação para que o 'gotoAndStop(2)' seja executado somente depois que todos os objetos forem removidos do stage.
Mas o código que eu te passei faz exatamente isso... rss
Teste de novo para você ver...
Bom, mas se é o que está faltando, basta colocar o gotoAndPlay dentro da condição:
if( cont == 20 ){
gotoAndPlay( 2 );
}
Abs,
Não é isso Roger. O 'gotoAndStop(2)' está no lugar devido.
A questão é que ao mover o mouse mais rápido não impede que vá para o frame 2 sem remover todos os objetos na tela.
Ou seja, o cont ainda ultrapassa 20. Clique aqui
Mas não vou ficar alugando você, aprender a estruturar o code de forma mais eficiente, adicionar name aos mcs e usar Strings está ótimo. Agradeço muito pela generosidade.
O resto, é conhecimento que me falta adquirir.
Grande abraço :grin:
Poxa, não acredito que só agora é que eu vim compreender o real problema... rss
ah, mas aí é bem tranquilo também...
Teste isso agora:
stop();
var boxs:Array = new Array();
var aux:int = 0;
for (var i:int =0; i<4; i++){
for (var j:int = 0; j<5; j++){
var box:MyMovie= new MyMovie();
box.name = "meuMc"+aux;
aux++;
boxs.push( box );
addChild(box);
box.x = i * 70;
box.y = j * 70;
box.buttonMode = true;
box.addEventListener(MouseEvent.MOUSE_OVER, anima);
}
}
function anima(e:MouseEvent):void {
var boxGrid = e.target as MovieClip;
efeito( boxGrid );
// TweenMax.to(boxGrid, .5,{autoAlpha: 0});
trace(boxGrid.name);
}
function efeito( mc:MovieClip ){
mc.addEventListener( 'enterFrame', alphaFunc );
}
function alphaFunc( e:Event ){
if( e.target.alpha <= 0 ){
e.target.removeEventListener( "enterFrame", alphaFunc );
var contador:int = 0;
for( var i:int = 0; i < boxs.length; i++ ){
if( boxs[ i ].alpha <= 0 ){
contador++;//Pra garantir que todos os boxs foram checados...
( contador == boxs.length )? gotoAndStop(2):"";
}
};
} else {
e.target.removeEventListener( MouseEvent.MOUSE_OVER, anima);
e.target.alpha -= 0.1;
}
};:no: ... mas reconheço que estou no lucro.
Tive uma aula de mestre que irá me auxiliar imensamente.
Preciso trabalhar as idéias, tentar fazer a minha parte.
Talvez ativar a anima em grupos de mcs com um delay facilite a vida.
Nenhum cliente atormentando, é só estudo mesmo. Sei que tem suas ocupações.
Muito obrigada Roger! Tudo de bom pra você. :clap:
>
:no: ... mas reconheço que estou no lucro.
Não entendi... Você quis dizer que não funcionou ou que não era bem isso que você queria? rss
>
Nenhum cliente atormentando, é só estudo mesmo. Sei que tem suas ocupações.
Eu sei, mas tranquilo... É, agora, como acabou o feriado, vou dar uma sumidinha do imasters...
Mas quando der eu apareço de novo.... :)
Muito obrigada Roger! Tudo de bom pra você.
Obrigado, tudo de bom pra você também...
Remove os mcs mas não vai para o frame 2.
Beleza, vou repensar este arquivo, uma hora sai.
^_^ ... me aguarde
>
Remove os mcs mas não vai para o frame 2.
...
Ops, então você deve estar fazendo alguma coisa de errado pois o código está certinho... :)
Sugiro você criar um novo .fla e testar novamente...
Abs,
êeeeee :clap: ... Valeu pela disposição Roger, eu já estava sem jeito (santa chacoalhada).
Usei o mesmo arquivo inicial, renomeado a cada modificação, tinha o mc exportado (MyMovie) com outro mc aninhado (stop no frame 1 e 20 + tween). Claro que o mc aninhado eu vi pela library, mas não lembrava da tween.
Nos testes anteriores não interferiu, mas neste, travou. Por isso eu não conseguia obter o trace(contador), nem por decreto.
Removi o que estava aninhado, e foi na boa.
Entendi a verificação que você criou. Vai render muito estudo, coisa boa.
O contador reinicia de '1' a cada mc acionado, nunca tinha visto desta forma.
Este trecho vou precisar mais atenção >> '? gotoAndStop(2):"";'.
Adicionei 'e.target.buttonMode = false;', em alphaFunc.
Ficou perfeito! Clique aqui
Agora é inventar um layout criativo, pra valorizar ainda mais.
Muitíssimo obrigada! ... que você receba sempre multiplicado.
Grande abraço Mestre :worship: ... Flash Forever!!!
Olá Elektra,
Eu estava esperando o problema ser resolvido para postar, estava em dúvidas se eu a ajudaria ou atrapalharia. O fato é que, infelizmente, eu não posso ajudá-la com a ferramenta Flash, já que uso exclusivamente Linux e não existe um Flash para Linux. Porém, seu problema não é de Flash e sim de Actionscript e, nisso, eu posso ajudá-la (e muito), principalmente em relação à orientação a objetos.
A primeira coisa que você precisa compreender é que, após compilar seu .fla, você terá seus frames, MovieClips e toda sua biblioteca transformados em classes e, então, instanciados, ou seja, tudo se resume à orientação a objetos. Com isso, você terá que levar em consideração alguns princípios básicos e poderá utilizar alguns padrões de design para resolver seu problema.
Quando falamos em MovieClip, Sprite e outros, estamos na verdade falando sobre DisplayObject que, no fim das contas, trata-se de Composite:
Composite
Tipo:
Structural
Intenção:
Criar uma composição de objetos em uma árvore que representa a hierarquia parte-todo. Com Composite, você trabalhará da mesma forma com os vários tipos de objetos da composição, independente da forma que o objeto é implementado.
Motivação:
É comum, principalmente em aplicações gráficas, termos vários tipos de elementos que, juntos, compõem um elemento maior e até toda a interface gráfica de usuário. Esse agrupamento de elementos diferentes para formar elementos maiores pode ser muito problemática se cada elemento tiver uma interface própria e diferente, precisaríamos conhecer cada elemento e trabalhar especificamente na sua implementação.
Para resolver esse tipo de problema, podemos utilizar uma composição recursiva, onde todos os objetos da árvore são, na verdade, instâncias de um elemento de interface de usuário, objetos simples e objeto de composição que possuem a mesma interface e que permitem que trabalhemos com todos eles uniformemente, fazendo com que a aplicação se torne mais simples.
/applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/uploads//1328025338/gallery_94216_5_14805.png&key=784eb3bb5b9113385eb769b48bedab4fd7f849cb35c7a1e98da470c3ffed8671" alt="gallery_94216_5_14805.png">
O flash.display.MovieClip e flash.display.Sprite são exemplos práticos de implementação do design pattern Composite, onde ambos são derivações de flash.display.DisplayObjectContainer que, por sua vez, é uma derivação de flash.display.DisplayObject. Tanto o MovieClip quanto o Sprite são objetos de composição, ou seja, eles aceitam outros objetos como filhos, enquanto o DisplayObject é um objeto simples, ou Leaf, que não aceita nenhum objeto como filho.
Aplicabilidade:
O padrão Composite pode ser utilizado quando se deseja representar uma hierarquia de elementos, como o XML, HTML e até MovieClip/Sprite/DisplayObject, ignorando a diferença entre os objetos da composição. Com Composite você será capaz de trabalhar com todos os elementos de uma forma única, independente da forma que a estrutura é representada.
Você pode utilizar Composite quando:
Estrutura:
/applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/uploads//1303591980/gallery_94216_25_12129.png&key=5beb59bfdf821825fe21a34680662b80a5e4ec0062df8e79e8ae3296dd46f02b" alt="gallery_94216_25_12129.png">
Compreendido que estamos falando sobre Composite, vamos ao seu problema:
>
Atualmente obtenho o índice ao carregar os objetos do Array.
Preciso verificar se todas as instâncias executaram a Tween para depois chamar uma nova função.
O Tween é executado quando o usuário passa com o mouse sobre algum item do Grid, ou seja, temos duas camadas aqui:
package com.imasters.forum.elektra {
import flash.display.Sprite;
public class Grid extends Sprite {
public function Grid( rows :uint , cols :uint ) {
super();
for ( var i :uint = 0 , k :uint = 1 ; i < rows ; ++i ) {
for ( var j :uint = 0 ; j < cols ; ++j ) {
var gridItem :GridItem = new GridItem( 70 , 70 , 2 );
gridItem.x = this.x + ( j * gridItem.width ) - ( 2 * j );
gridItem.y = this.y + ( i * gridItem.height ) - ( 2 * i );
addChild( gridItem );
}
}
}
}
}
package com.imasters.forum.elektra {
import flash.display.Sprite;
public class GridItem extends Sprite {
public function GridItem( width :uint , height :uint , lineWidth :uint = 2 ) {
super();
graphics.lineStyle( lineWidth , 0x660099 );
graphics.beginFill( 0xE1C4C4 );
graphics.drawRect( 0 , 0 , width - lineWidth , height - lineWidth );
graphics.endFill();
}
}
}
Um dos princípios mais básicos da orientação a é o S.R.P. ou Single Responsibility Principle ou, ainda, Princípio da Responsabilidade Única. Veja, cada item da grade deve ser responsável por seu desenho, a grade é responsável por organizar os itens visualmente, mas nenhum dos dois é responsável por lidar com a ação do usuário.
Nesse caso, precisamos ter:
-
View: Grid e GridItem
-
Controller: GridController
package com.imasters.forum.elektra {
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.events.Event;
public class GridController {
private var numChildren :int;
private var grid :Grid;
public function GridController( grid :Grid ) {
numChildren = grid.numChildren;
this.grid = grid;
for ( var i :int = 0 ; i < numChildren ; ++i ) {
var item :DisplayObject = grid.getChildAt( i );
if ( item is GridItem ) {
item.addEventListener( MouseEvent.MOUSE_OVER , handleMouseOverEvent );
}
}
}
public function handleMouseOverEvent( e :MouseEvent ) :void {
var gridItem :GridItem = e.target as GridItem;
gridItem.hide();
gridItem.removeEventListener( MouseEvent.MOUSE_OVER , handleMouseOverEvent );
if ( --numChildren == 0 ) {
grid.dispatchEvent( new Event( Event.COMPLETE ) );
}
}
}
}
Com o GridController tomando conta das ações do usuário, Grid precisa conhecê-lo:
package com.imasters.forum.elektra {
import flash.display.Sprite;
public class Grid extends Sprite {
private var gridController :GridController;
public function Grid( rows :uint , cols :uint ) {
super();
for ( var i :uint = 0 , k :uint = 1 ; i < rows ; ++i ) {
for ( var j :uint = 0 ; j < cols ; ++j ) {
var gridItem :GridItem = new GridItem( 70 , 70 , 2 );
gridItem.x = x + ( j * gridItem.width ) - ( 2 * j );
gridItem.y = y + ( i * gridItem.height ) - ( 2 * i );
addChild( gridItem );
}
}
gridController = new GridController( this );
}
}
}
E GridItem fica assim:
package com.imasters.forum.elektra {
import flash.display.Sprite;
public class GridItem extends Sprite {
public function GridItem( width :uint , height :uint , lineWidth :uint = 2 ) {
super();
graphics.lineStyle( lineWidth , 0x660099 );
graphics.beginFill( 0xE1C4C4 );
graphics.drawRect( 0 , 0 , width - lineWidth , height - lineWidth );
graphics.endFill();
}
public function hide() :void {
alpha = 0; //pode utilizar o Tween, a implementação não é relevante
}
}
}
Para usar isso ai, basta fazer o seguinte:
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import com.imasters.forum.elektra.Grid;
public class Elektra extends Sprite {
public function Elektra() {
super();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var grid :Grid = new Grid( 5 , 4 );
grid.addEventListener( Event.COMPLETE , function() :void {
//faça alguma coisa quanto todos os itens da grade
//estiverem invisíveis
} );
addChild( grid );
}
}
}
Muitas vezes, Elektra, quando estamos escrevendo algum código, o problema está na falta de design. Princípios e padrões de design ajudam a evitar e resolver problemas recorrentes e padrões de arquitetura ajudam na organização e delegação de responsabilidades. Lembre-se sempre, quanto mais coeso for a responsabilidade de um objeto, menor a probabilidade de você ter um problema de design.
Coloquei o código no github :seta: https://github.com/n...batista/elektra
Para fazer o clone do repositório:
git clone git://github.com/netojoaobatista/elektra.git
Se preferir, você pode fazer o download do código em: https://github.com/n...ektra/downloads Haverão dois botões, "Download as .tar.gz" e "Download as .zip", escolha o que for mais apropriado.
;)
PS: Espero não tê-la atrapalhado ou confundido, sei que não é um tema muito simples, mas é definitivamente um tema muito divertido.
Parabéns, João!
Deu um show de OOP... :)
Eu, particularmente, gosto muito de OOP... Padrões são uma mão na roda, sem dúvidas, contudo, para alguns, não é algo tão simples de se entender... Deve ser, na minha opinião, um segundo passo após aprender os conceitos básicos de OOP...
Por isso sempre contribuo dentro do contexto(e quando tenho um tempinho)... Mas sua participação foi ótima, e certamente, contribuirá um pouco mais para usuários do nível avançado...
Agora, sobre o código em si, eu testei aqui em casa e vi que a versão que está no post não funciona como desejado, pois o segundo passo é executado antes do esperado. Já a versão que você disponibilizou para download, eu baixei e está funcionando perfeitamente... E como falei antes, pois não costumo usar a classe TweenMax, em vez de um removeChild, usar o evento COMPLETE(ou algo assim se houver) da classe citada, pois dependendo da aplicação, talvez o usuário não queira remover os objetos do palco...
Mas pra efeito de explicação está perfeito.
Elektra:
Até existe outras formas de se fazer, pois o for não ficou muito elegante no código que te passei... Peço desculpas porque escrevi em meio a minha correria...
Mas, se quiser, pode remover ele e inserir o contador no início. Deixando apenas a verificação da forma como está...
Tudo de bom pra você...
E um abraço ao meu amigo João Batista.
@ Roger, não importa se é perfeito, agradeço imensamente por ser algo que eu possa compreender no momento.
A dúvida quanto ao operador '?:' uma consulta no Essential ActionScript 3.0, description (pag 183) :
"Performs is a simple conditional. If the first operand is true or converts to true, the value of second operand is evaluated and returned. Otherwise, the value of the third operand is evaluated and returned.
translate:
"Executa uma condicional simples. Se o primeiro operando é verdadeiro ou converte para verdadeiro, o valor do segundo operando é avaliado e retornado. Caso contrário, o valor do terceiro operando é avaliado e devolvido."
Example:
//Invoke one of two methods based on
//whether soundMuted is true
soundMuted ? displayVisualAlarm() : playAudioAlarm()
A idéia inicial é usar este grid como máscara, com interação do usuário (um eraser que chama outra função), e com algumas modificações em outro arquivo, animar índices do Array em grupos como máscara em um slideshow.
Em code estruturado mesmo, acessível para quem está começando.
Muito chão pela frente, algumas pedras a menos com o auxílio de amigos. Bom demais.
Grande abraço :grin:
ah, é! Me esqueci de explicar o operador :D
Sim, sim... o operador ternário equivale ao if{}else{} como você já viu...
Nada de mais não... É que acabou passando batido... rss
Boa sorte nessa sua jornada... E lembre-se, todos os que estão um pouco acima do seu nível já trilharam o mesmo caminho...
No que precisar, e dentro das possibilidades, eu estou a disposição sua e de quem precisar...
Um bom domingo pra você.
Fique com DEUS,
Obrigada, eu tinha deduzido por observação o uso do operador, mas precisava da 'segurança' que dá liberdade do uso com discernimento.
Exemplo no Adobe Help: http://help.adobe.com/pt_BR/FlashPlatform/reference/actionscript/3/operators.html#conditional
Code básico que eu mesma tinha postado e nem lembrava mais (Clique aqui) # 14:
mcbola.addEventListener(MouseEvent.CLICK, onClick);
var nome:String = "Pedro"
function onClick(e:MouseEvent):void
{
e.target.alpha == 1 ? e.target.alpha = .5 : e.target.alpha = 1;
trace(nome);
}Progressos à vista (e complicações também :lol:).
Criei o grid via AS3, obtive o mascaramento criando outra variável, mas fiquei sem acesso aos mcs, que beleza! Era tudo que eu precisava pra atormentar a vida.
Usando diversos Arrays, para grupos de mcs no stage, obtenho a animação com delay (TweenMax), perfeito para o slideshow. Agora, mascarar isso dentro de 2 for's, com objetos criados pelo action, é pedir pra arrastar correntes.
Aprendi mais um pouquinho com o auxílio de amigos de outro local, bom demais.
Mas fazer a coisa funcionar já é assunto pra outro tópico (é ruim que eu largue o osso) ahahaahhhhh
... cada pequena conquista é valiosa, eu tô na luta! AMO Flash.
Grande abraço :clap:
Olá Elektra
se eu entendi bem o que você esta tentando fazer, é que depois depassar o mouse sobre todos os 20 movieClips,
é para ir para o frame 2, certo?
se for, para que a contagem fique correta, acho que você teria que remover o listenner depois que passar
o mouse da primeira vez, para não executar de novo
[]´s