Comunidad de diseño web y desarrollo en internet online

Duda sobre ambitos

Citar            
MensajeEscrito el 10 Nov 2006 11:10 am

Código :

function darSegundos():Number {
   var nSegundos:Number = Math.floor(getTimer() / 1000);
   return nSegundos;
}
function moverSegundero():Void {
   var nRotacion:Number = darSegundos();
   // LA LINEA SIGUIENTE NO FUNCIONA CON this, PERO SI CON _root,
   // NO ENTIENDO POR QUE. 
   // TAMPOCO ENTIENDO POR QUE SI HAGO UN TRACE A THIS DENTRO
   // DE ESTA FUNCION ME DEVUELVE undefined
   // NO SE SUPONE QUE ESTE this DEBERIA HACER REFERENCIA A LA 
   // LINEA DE TIEMPO PRINCIPAL?
   //(el clip mcSegundero esta en _root) Ahi va la linea:
   this.mcSegundero._rotation += nRotacion;
}
setInterval(moverSegundero, 1000);

Por oxk4r

56 de clabLevel



 

Orense·España

firefox
Citar            
MensajeEscrito el 10 Nov 2006 11:40 am
Quizás sea porque mcSegundero no se encuentra en this (ese lugar) si quieres ver en un nivel más arriba (el que lo contiene) entonces debes colocar _parent.

Por micheloud

341 de clabLevel



 

Misiones, Argentina

firefox
Citar            
MensajeEscrito el 10 Nov 2006 12:40 pm
Hola micheloud. Mira el clip esta en _root, y el script esta en el 1er fotograma, en _root tambien, por eso suponia que "deberia" funcionar.

Por oxk4r

56 de clabLevel



 

Orense·España

firefox
Citar            
MensajeEscrito el 10 Nov 2006 02:32 pm
Directo de la ayuda de Flash:

this
Disponibilidad
Flash Player 5.

Sintaxis
this

Descripción
Identificador; hace referencia a una instancia de objeto o de clip de película. Cuando se ejecuta un script, this hace referencia a la instancia de clip de película que contiene el script. Cuando se llama a un método, this contiene una referencia al objeto que contiene el método llamado.

Dentro de una acción de controlador de eventos on asociada a un botón, this se refiere a la línea de tiempo que contiene el botón. Dentro de una acción de controlador de eventos onClipEvent() asociada a un clip de película, this se refiere a la línea de tiempo del propio clip de película.

Como this se evalúa en el contexto del script que lo contiene, no puede utilizar this en un script para hacer referencia a una variable definida en un archivo de clase:

// en el archivo applyThis.as
class applyThis{
var str:String = "Definido en applyThis.as";
function conctStr(x:String):String{
return x+x;
}

function addStr():String{
return str;
}
}

// Utilice el código siguiente en FLA para probar la película
import applyThis;

var obj:applyThis = new applyThis();
var abj:applyThis = new applyThis();
abj.str = "definido en FLA";

trace(obj.addStr.call(abj,null)); // definido en FLA
trace(obj.addStr.call(this,null)); // no definido
trace(obj.addStr.call(obj,null)); // Definido en applyThis.as

Asimismo, para llamar a una función definida en una clase dynamic, debe utilizar this para el ámbito de la función:

// versión incorrecta de simple.as
dynamic class simple{
function callfunc(){
trace(func());
}

}

// versión correcta de simple.as
dynamic class simple{
function callfunc(){
trace(this.func());
}
}
// sentencias en el archivo FLA
import simple;
var obj:simple = new simple();
obj.num = 0;
obj.func = function():Boolean{
return true;
}
obj.callfunc(); // error de sintaxis con la versión incorrecta de simple.as

Ejemplo
En el ejemplo siguiente, la palabra clave this hace referencia al objeto Circle.

function Circle(radius) {
this.radius = radius;
this.area = Math.PI * radius * radius;
}

En la sentencia siguiente asignada a un fotograma, la palabra clave this hace referencia al clip de película actual.

// establece la propiedad alfa del clip de película actual en 20
this._alpha = 20;

En la sentencia siguiente dentro de un controlador onClipEvent(), la palabra clave this hace referencia al clip de película actual.

// cuando se carga el clip de película, se inicia una operación startDrag()
// para el clip de película actual.

onClipEvent (load) {
startDrag (this, true);
}

Véase también
on(), onClipEvent()


Espero te sirva, saludos.

Por RafaelTol

33 de clabLevel



Genero:Masculino  

México

msie7
Citar            
MensajeEscrito el 10 Nov 2006 04:46 pm
Con un setInterval no utilices this. No pongas nada y funcionará.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 10 Nov 2006 04:47 pm
Haz el setInterval asi:

Código :

function darSegundos():Number {
   var nSegundos:Number = Math.floor(getTimer()/1000);
   return nSegundos;
}
function moverSegundero():Void {
   var nRotacion:Number = darSegundos();
   this.mcSegundero._rotation += nRotacion;
}
intervalo = setInterval(this, "moverSegundero", 1000);

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 14 Nov 2006 03:42 am
Gracias a todos por vuestra ayuda, creo que ya lo tengo.

Por oxk4r

56 de clabLevel



 

Orense·España

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.