Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

roliver

Mudar o método "play()"

Recommended Posts

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

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

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

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

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

É, 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

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

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,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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.