Artigos com a tag 'contexto'

ActionScript: quadros _parent e controle

Quando o "gatilho", um evento de um contexto de objeto, que é o objeto pai que representa o escopo de todas as variáveis, torna-se o próprio objeto. Este aspecto, característica da programação orientada a objeto, pode ser desorientador causando erros e bugs no código. Além disso, em determinadas situações, pode impedir o acesso a algumas variáveis ​​"antes" disponível.

Primeiro de tudo, vemos uma característica do ActionScript relacionados ao gerenciamento de contexto que, se for incluída, vai nos salvar algumas horas de testes desnecessários. Quando temos a ver com gráficos ou simplesmente MovieClips aninhados uns dentro dos outros, a propriedade _parent , resolução de problemas de contexto. Por exemplo, se o MovieClip padre_mc contiente figlio_mc outro MovieClip e usar o seguinte código:

1
2
3
4
5
/ / Código dentro padre_mc
( ) { figlio_mc. onRelease = function () {
this ) ; // figlio_mc trace (this); / / figlio_mc
this . _parent ) ; // padre_mc trace (this. _parent); / / padre_mc
}

Risalisre o "pai", então, é claro e imediato.

Com classes puras, o código-somente, extensão ou da propriedade MovieClip _parent não está disponível e pode complicar as coisas! Immaginiiamo ter uma classe MyClass :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MovieClip { Classe MyClass estende MovieClip {
MyClass function () {
/ / Construtor
}
/ /
myMethod function () {
this ) ; // myClass trace (this); / myClass /
; var num = 5;
; var cp = this;
....
[ un oggetto ] ; var myObject = new [objeto];
( ) { myObject onLoad. = function () {
this ) ; // myObject trace (this); / / myObject
cp ) ; // myClass trace (cp); / myClass /
}
}

, ovvero il puntatore alla classe MyClass . O contexto de MyMethod() é, evidentemente, this , que é o ponteiro para a classe MyClass . . A variável num , por exemplo, tem um ciclo de vida fechado dentro do método MyMethod() . É, portanto, apenas visíveis dentro do método e será destruído na saída. . Mesma coisa para a variável myObject que inicializa um evento, no entanto, neste caso onLoad . lasciandoci, apparentemente, senza il puntatore alla classe madre myClass . Quando acionado onLoad() contexto vai se tornar myObject deixando, aparentemente, sem o ponteiro para a classe pai myClass . , ha lo stesso contesto della variabile myObject ! Um olhar mais atento ao código podemos ver que a variável cp , definido no método myMethod() , tem o mesmo contexto da variável myObject ! dell'oggetto myObject in quanto condivide con esso lo stesso contesto. Na verdade, a variável cp (ponteiro de classe) será visível dentro do método onLoad objeto myObject como ele compartilha o mesmo contexto. ha necessità di “vivere” più al lungo del previsto visto che ha “allocato” un evento (di tutto questo se ne occupa Flash a nostra “insaputa”). Na verdade o método myMethod() não apenas porque o objeto é desalocada myObject tem a necessidade de "viver" em cima da. mais que o esperado porque tem "atribuído" um evento (tudo isso está lidando com o Flash no nosso "desconhecido")

Conselho

Para os eventos associados com botões ou MovieClips um bom hábito seria usar o formulário:

1
2
3
4
5
my_mc onRelease = myOnRelease.;
myOnRelease função () {
this ) ; // _root trace (this); / / _root
"Click me" ) ; trace ("Clique em mim");
}

No lugar do mais rápida e imediata:

1
2
3
4
( ) { my_mc. onRelease = function () {
this ) ; // my_mc trace (this); / / my_mc
"Click me" ) ; trace ("Clique em mim");
}

A vantagem de utilizar uma função externa é ter um contexto neutro ea possibilidade de alcançar a função independente da MovieClip que controla. No segundo caso, por exemplo, se você quiser forçar a execução do código vinculado ao "click" do MovieClip que eu deveria usar um código deste tipo:

1
; . my_mc onRelease ();

Na prática, eu chamo o evento como se fosse um método. No entanto, tenho - de fato - para que a MovieClip my_mc . De qualquer maneira, no entanto, pode executar o código diretamente chamando myOnRelease() . Obviamente, como mostrado nos exemplos, olho para contextos. . No primeiro caso, o contexto de myOnRelease() é a mãe do objeto onde está escrito, por exemplo, _root . No segundo caso, em vez disso, o contexto é sempre o MovieClip my_mc !

Forçando um contexto diferente

Concluímos com alguns truques úteis em muitas circunstâncias. in grado di forzare un contesto di un metodo o funzione. O Flash oferece uma biblioteca, mx.utils com um objeto Delegate pode forçar um contexto de um método ou função. Seu uso é muito simples:

1
2
3
4
5
6
7
8
utils . Delegate ; .. importação mx utils Delegado;
/ /
// puntatore ad un MovieClip my_mc var, / / ponteiro para um MovieClip
// un bottone my_btn var, / / um botão
myFunction function () {
this ) ; trace (this);
}
create ( my_mc , myFunction ) ; my_btn onPress = Delegado criado (my_mc, myFunction)..;

O evento onPress my_btn os botão aponta para uma função de "novo" criado precisamente com o my_mc contexto. Quando você clicar no botão my_btn, o código executado em myFunction() terá como my_mc contexto!

Leia mais ...


Pare SOPA