Logo

¡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.
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.