roliver 0 Denunciar post Postado Setembro 25, 2006 Bom dia! Pessoal: Estou com um problema, e cheguei à conclusão que uma das melhores maneiras de resolvê-lo seria sobrescrever o método "play()" do "MovieClip.prototype" (o que faria com que qualquer "play()" agisse como o novo método, correto?). O problema é que boa parte do método deveria continuar intacta e, portanto, eu preciso do código-fonte original para fazer o serviço. Alguém sabe onde posso conseguí-lo? Outra coisa: Para que minhas apresentações em flash incorporem o novo comportamento eu deverei fazer um "include" do arquivo "as" com a alteração do método ou há alguma outra maneira de fazer isso? Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Setembro 25, 2006 Eerrmm, não há como mudar uma classe nativa do flash, mas dá para fazer um 'extends' onde você cria uma classe herdando as características da outra. Se você tiver realmente afim do código-fonte, fica geralmente em c:Arquivos etc/Macro../Flash 8/en/first run/classes (sinceramente acho que a melhor maneira não é por aí...).Bom, até. Compartilhar este post Link para o post Compartilhar em outros sites
roliver 0 Denunciar post Postado Setembro 25, 2006 Valeu pela atenção, Antonio! Pois é, eu já havia dado uma olhada nesse diretório e nos arquivos que estão lá... Mas na verdade não há código fonte nestes arquivos, mas sim as declarações de propriedades e métodos das classes... Já que você não corcorda com a minha idéia, vou te explicar um pouco melhor do que se trata e aí podemos discutir... Aí vai: Estou montando um projeto GIGANTE do qual infelizmente não posso dar maiores detalhes devido a um contrato de confidencialidade. O fato é que de vez em sempre eu preciso que algum movieclip retroceda na linha de tempo... E já tô de saco cheio de ficar usando o "onEnterFrame" toda hora que preciso disso... Também não quero colocar o "onEnterFrame" no protótipo da classe MovieClip, pois de vez em quando preciso implementar algo neste evento, além da "reprodução invertida". A minha idéia é, portanto, criar no protótipo da MovieClip um método chamado (por exemplo) "playBackwards()" que faria exatamente a mesma coisa do "play()", mas em sentido invertido (acredito que o código do "play()" utilize em algum ponto o método "nextFrame()"; assim, sendo otimista, só precisaria mudar essas chamadas por "prevFrame()"). Espero ter sido claro. Concorda? Pensa em algo melhor? Por favor me faça saber! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Qualquer dúvida é só postar, por favor. Valeu! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Setembro 25, 2006 Não sou um gênio em prototypes mas acho que isso dá pro gasto. Ele cria um mc vazio dentro do seu mc só pra usar o onEnterFrame dele e não do seu mc em si: MovieClip.prototype.playBack = function(frame:Number) { this.createEmptyMovieClip("meuEnterFrame", this.getNextHighestDepth()); this.meuEnterFrame.onEnterFrame = function() { frame == undefined ? frame = 1 : null; this._parent._currentframe > frame ? this._parent.prevFrame() : delete this.onEnterFrame; };};MovieClip.prototype.stopBack = function() { this.meuEnterFrame.removeMovieClip();};//Para usar:mc.playBack();//começa a voltar e para no 1mc.playBack(15);//volta e para no 15mc.stopBack();//para o playBack Bom, acho que rola, vai? Compartilhar este post Link para o post Compartilhar em outros sites
roliver 0 Denunciar post Postado Setembro 26, 2006 Rola sim, Antonio! Inclusive é bem melhor que a solução que utilizo atualmente... Mas concorda que seria bem mais interessante eu ter exatamente o método play() invertido? Como exemplo de ganhos, o playBackwards() respeitaria chamadas do método stop() e pularia para o último frame quando passasse pelo primeiro. Na verdade acho que a própria Macromedia devia ter criado este método. Esperemos que a Adobe o faça! Concorda? Me apóia? Acha que se eu procurar mais a fundo rola? http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Setembro 26, 2006 É, acho que seria interessante um play ao contrário... mas não sei se colocariam isso como função "nativa".Cara, se quiser procurar mais a fundo vai em frente, hehe. Mas se esse método já rola legal... bom, deixa pra lá. :PFlw Compartilhar este post Link para o post Compartilhar em outros sites
« Léo » 0 Denunciar post Postado Setembro 29, 2006 Antonio, nao seria melhor assim: MovieClip.prototype.playBack = function(frame:Number) { this.createEmptyMovieClip("meuEnterFrame", this.getNextHighestDepth()); this.meuEnterFrame.onEnterFrame = function() { frame == undefined ? frame = 1 : null; this._parent._currentframe > frame ? this._parent.prevFrame() : this.meuEnterFrame.removeMovieClip(); };};MovieClip.prototype.stopBack = function() { this.meuEnterFrame.removeMovieClip();}; Acho q seria legal, qd chesse no 1º frame, deletar o MC, assim como no stopBack. Não? Na verdade não sei nem se é a melhor maneira, mas to querendo chegar à melhor solução! XD Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Setembro 29, 2006 Opa, boa idéia Léo. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
roliver 0 Denunciar post Postado Setembro 29, 2006 Opa... Foi exatamente isso que eu fiz, Léo, mas só no stop()... No playBackwards() eu fiz com que ele fosse para o último frame quando chegasse no primeiro, já que é ao contrário que o método play() se comporta...Antonio,Procurei bem a fundo a possibilidade de replicar o código do play() para o playBackwards(), mas todos os métodos de navegação do MovieClip são declarados pelo método ASSetNative, e não tive acesso ao fonte deste método.Sendo assim, resolvi agir da seguinte maneira:- Criei o método playBackwards me baseando na sua idéia de um mc que controle a linha de tempo de seu pai;- Criei o método playRaul() (só um exemplo. na verdade utilizei o nome da empresa onde trabalho.) que age exatamente como o play(), mas utilizando também a idéia de um mc filho que controla a linha de tempo de seu pai;- Criei o método stopRaul() (só um exemplo, novamente) que faz as vezes do método stop(), com o diferencial de parar, além do playRaul(), o playBackwards().No final das contas, aposentei os métodos play() e stop() nativos do flash, já que eles impediam a utilização que eu necessito.Sei que isso parece muito trabalhoso, mas o trabalho valeu a pena. Quando quero que o movieclip reproduza executo o "playRaul()"; quando quero que reproduza ao contrário, executo o "playBackwards()"; quando quero que ele pare, independente do sentido de reprodução, executo o "stopRaul()".Alguém tem alguma ressalva ou crítica? Qualquer comentário será bem vindo!Valeu! Compartilhar este post Link para o post Compartilhar em outros sites
« Léo » 0 Denunciar post Postado Setembro 30, 2006 mt bom cara.... posta teus codigos ae pra nois ver como ficou o result final! ;-)Abraços!!! Compartilhar este post Link para o post Compartilhar em outros sites
roliver 0 Denunciar post Postado Outubro 1, 2006 Léo,Infelizmente não posso postar o código pronto, pois tudo que faço aqui é de propriedade da empresa.Mesmo assim, fico à disposição para quaisquer esclarecimentos que alguém necessite.Aproveito também para agradecer a atenção de vocês!Valeu! Compartilhar este post Link para o post Compartilhar em outros sites