Anuncios Google

Duda sobre como detener una función

Bueno mi duda es que si hay alguna forma de detener una función, no se si me explico.

Digamos que tengo dos funciones distintas, una establece que un objeto se va a mover a la izquierda y otro a la derecha.

establezco que el objeto comienze moviendose a la izquierad pqro cuando pongo que cambie su mvimiento a la derecha simplemente se detiene, supongo que es porque la primera función no se detiene.

Aquoi le s pongo un fragmento de mio codigo:

function movizq()
    time=1
    if time==1  then
    Bola[1].x=Bola[1].x-1
    end

     end      

function movder()
   time=0
   if time==0 and Bola[1].x < 454 then
   Bola[1].x=Bola[1].x+1
   end
  
   if Bola[1].x==454 then
   time=1
   end
   end
  

---comienza el movimiento
movder()

if Bola[1].x ==454 then
movizq()
end

 

sea cual sea el error necesito que el objeto cambie de dirección al llegar a el pixel 454 del eje x.

Gracias anticipadas. 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de mcapu

Otra manera

Ésta es la forma real en que lo haría yo, sin embargo, he posteado antes para que tu código apenas fuera modificado. Con ésta, las posibilidades de mover la bola se amplían, puesto que es una única variable la que engloba todo. Leyendo el código lo entenderás mejor:

function move()

nuevox=Bola[1].x+velocidad

if nuevox>454 then

Bola[1].x=454

cambia=1

else if nuevox < 0 then

Bola[1].x=0

velocidad=velocidad*(-1)

else

Bola[1].x=nuevox

velocidad=velocidad*(-1)

end

end

Luego, únicamente debes crear un timer (que no sé si existirá en LUA), que es una función que provoca que se repita algo cada cierto tiempo, y poner esto:

velocidad=1

move()

¡Sólo eso!

De esta manera, cada vez se ira moviendo un pasito más hacia la derecha. Si quieres mover hacia la izquierda, pues:

velocidad=-1

move()

Y ya está. Además, puedes cambiar la velocidad del movimiento a tu gusto.

Nota: la sentencia velocidad=-1 sólo debe ir escrita una vez, si no, la bola se quedará estancada en un margen de la pantalla


mcapu

Imagen de mcapu

El problema es...

que al comienzo de cada función cabias la variable time. Esto provoca que al ejecutarse la misma, no haya ningún problema para que el condicional se pare. Me explico: Tienes una sentencia "if", que comprueba si una variable (en este caso "time") es igual a 1. ¡Pero en la sentencia anterior la acabas de cambiar a ese valor! ¿Qué ocurre? Pues que lo tiene. Pero inmediatamente después la otra función lo cambia a 0, y también se ejecuta el "if".

Tengo que dejar una cosa clara: yo no sé nada de LUA. Eso sí, sé mucho sobre ActionScript (el lenguaje de programación de Flash) y algo sobre Visual Basic, combinado también con API's de Windows. Por ello, si ves que en el código he metido alguna sentencia o declaración no válida, por favor, mándame un mensaje o responde y me miraré los tutos para corregirla :P

Hay dos maneras de arreglar esto:

-La que utilizaría yo (sólo se utiliza una función):

function move()

if time==0 then
Bola[1].x=Bola[1].x+1
end

if time==1 then

Bola[1].x=Bola[1].x - 1

end

if Bola[1].x==454 then
time=1
end

if Bola[1].x==0 then
time=0

end
end

//Después ya sólo tienes que llamar a la función move, justo después de cambiar el valor de la variable time:

Para mover a la derecha:

time=0

move()

Para mover a la izquierda:

time=1

move()

(Continúo)

 


mcapu

Imagen de mcapu

...

La otra manera sería directamente llamar a las funciones después de cambiar la variable, exactamente lo mismo que he introducido al final del primer comentario. Espero haber sido de ayuda, y si no, ya sabes, responde.

Que sepas que si supiera cómo poner un "else", lo habría hecho, porque es lo correcto, pero no lo sé exactamente y no quiero que te dé problemas de código :P 


mcapu

abajo de esto deberia

abajo de esto deberia "---comienza el movimiento" ser:

if Bola[1].x <454 then
movder()
else
movizq()
end

Podria explicartelo, pero se me da muy mal xDDDDDDDDD

Imagen de Tanos

Funciona pero...

Funciona pero la pelota no se mueve hacia atras, solo empieza a temblar.

De todas maneras gracias voy a seguir investigando a partir de tu consejo XD. 

cambia estas

cambia estas funciones

function movizq()
time=1
if time==1 then
Bola[1].x=Bola[1].x-1
end

end

function movder()
time=0
if time==0 and Bola[1].x < 454 then
Bola[1].x=Bola[1].x+1
end

y dejalas asi

function movizq()
Bola[1].x=Bola[1].x-1
end

function movder()
Bola[1].x=Bola[1].x+1
end

es que no entiendo para que usas el time

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.