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