Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda con LUA

Iniciado por XÑA, 22 de Noviembre de 2011, 10:44:59 AM

« anterior - próximo »

XÑA

A ver, he creado un modulo que se llama ObjetoRayo


module(..., package.seeall)

spriteSet=nil
tipo=3

function init()

spriteSet = sprite.newSpriteSet(uma,RAYO,5)

sprite.add(spriteSet,"encendido",1,2,1000,1)

end

function onTime(objeto)

objeto:prepare("encendido");
objeto:play();

end

function onStart(objeto1,tiempo)

local myclosure=function() return onTime(objeto1); end

timer.performWithDelay(tiempo,myclosure)

end


Pues cuando lo llamaba, hacía ( objeto estaba creado anteriormente)

ObjetoRayo:OnStart(objeto,3000)


Y me daba un error en lua en timer.performWithDelay(tiempo,myclosure), porqué me decia que el objeto era nil

Lo curioso es quelo he arreglado usando un . en lugar de los :


ObjetoRayo.OnStart(objeto,3000)


¿Qué diferencia hay entre usar los ':' y el '.'?

Gracias ;)

gdl

Por lo que he leído por ahí,   x:f(a) es igual que escribir  x.f(x,a)

Gallo

#2
Exacto, los : es como si en el método hubiera un self, tanto para la llamada como para la definición del método.

Te recomiendo leer algo sobre orientación a objetos con lua por que lo estas empleando incorrectamente. ObjetoRayo seria la metatable de objeto en este caso, si lo empleas de la forma correcta usando metatables y metamétodos la llamada es tan transparente como esto:

objeto = ObjetoRayo:new();
objeto:OnStart(3000);



XÑA

Gracias.  ;)

Qué diferente!!!  :(






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.