Anuncios Google

Movimiento parabólico en Lua [35 scenebitos al que solucione este problema]

Estoy haciendo un juego y necesito ayuda. Lo que quiero conseguir es
automatizar el salto del tal manera que cuando el personaje que
nosotros movemos hacia la derecha y un enemigo este a "y" altura
calcule x-y para atacar a nuestro personaje mediante un movimiento
parabólico. Esto es solamente una idea, ni lo he probado:

--Variables personaje 1
 
x1inicial = 20
v1inicial = 0
y = 200
 
--Variables personaje 2
 
x2inicial = 420
v2inicial = 0
y2inicial = 100
y2final = 200
g = 9.8
 
--Valor del tiempo
contadot = Timer.new()
contador:start()
t = contador:time()
---------------------------------------------.
--Fórmulas para el cálculo de la trayectoria .
--X = X + V*T                                .
--Y = Yinicial + vinicial -1/2*g(t*t)        .
--vfinalx = vinicial * cos                   .
--vfinaly = vinicial * sin                   . 
---------------------------------------------.
 
--Calculos personaje 1
 
v1finalx = pasosd * math.cos(100)
 
x1 = x1inicial + v1finalx * t
 
 
--Calculos personaje 2
 
v2finalx = pasosi * math.cos(100)
v2finaly = pasosi * math.sin(100)
 
x2 = x2iniciak + v2finalx * t
y2 = y2inicial + v2finaly - 1/2 * g * (t*t

Las variables pasosd y pasosi hacen referencia al tutorial de mover
sprites, si sabéis alguna manera de solucionar y combinar el movimento
de sprites con estas funciones decidlo.


Image Hosted by ImageShack.us 


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 kiketoreador

Perdonadme he echo un doble

Perdonadme he echo un doble post sin querer.

Imagen de kiketoreador

un consejillo

A lo mejor te sirve debes de ajustar las ecuaciones de tal manera que a partir de esa posición que quiera llegar una xfinal y una yfinal,ojo no la de las fórmulas si no la del objetivo, se cumpla para un grado desde tu posicion inicial o de tu personaje,el bueno, y una velocidad y por último he de decirte que tendrás que crear la manera de que el personaje se pare antes de seguir bajando debido a la gravedad.

 

Saludos.


Navesound

Imagen de trom_us

en lo que lo checo

http://es.wikipedia.org/wiki/Movimiento_parab%C3%B3lico

vere lo de estas formulas, pero tendras que ponerlo en una funcion dentro del while que usas para el movimiento de tus personajes, de esta manera el objeto bala por decirlo asi, actualizara su pocicion hast allegar a su objetivo.

entonces

 

setiniparabola(num,dato.....)

while

putparabola(num,bala,destino) donde destino es la screen o imagen, segun que lua uses. opcional a usar en screen por defaul

etc..

etc..

end

de eta manera actualizas tu objeto bala

donde num es la parabola correspondiente a un objeto x, pues puedes tener mil balas y cada una una trayectoria y destino diferencte.

aunque si haces unos bosquejos en papel del resultado me ayudas mas, porque creo que no son balas sino ataques de pelea lo que buscas.

Imagen de recoco

Parábola

Correcto. El caso que preguntaba de parábola es:

--Un personaje y enemigo situados en X e Y posicion:
 
personaje{}
personaje[1] = {x = 40, y = 220}
sprite = personajesprite1
pasosd = 0
 
enemigo{}
enemigo[1] = {x = 400, y = 100}---------aqui esta mi duda
sprite = enemigosprite1
pasosi = 0
 
etc
etc

Mi duda es que como hago la parabola del enemigo que está en una montaña de 100 pixeles de altura (por ejemplo) y que el enemigo calcule X e Y del personaje para atacar. Por ejemplo si has jugado al left 4 dead, ¿como se haría el movimiento del hunter? Utilizo Lua Player HM7. Pero luego el problema que habrá será para volver hacer el salto, porque no seran las mismas coordenadas, se tendría que hacer una funcion global que guarde los datos de X e Y para cada movimiento y posicion.

Una idea:

function posicion(x,y,angulo)
math.tan(angulo) = height/weight 
vx = v * math.cos(angulo)
x = xo + vx * t
vy = v * math.sin(angulo)
y = yo + vy * t - 1/2 * g * (t*t)
end
 
while true do
posicion()
screen:blit(x,y,imagen)
screen.waitVblankStart()
screen.flip()
end

Pero, aquí también hay un problema, este codigo calcula X e Y pero no lo hace referencia al personaje.


Image Hosted by ImageShack.us 

Imagen de trom_us

me falto la img, pero bueno...

A.

                        ?

               B

en este caso el personaje simpre sabe donde estas, y nunca falla, a menos que despues de dar el el salto tu te muevas.
bien, este movimiento sgun veo, es por ejmeplo con gravedad de caida,  acelareacion y bajada tanto en x como en y
vien le vas a acelerar la gravedad a caida libre, al mismo tiempo que avanzar segun la velocidad inicial o aceleracion de salida de potencia
que le des.

datos que el atacante tendria(en los corchetes va el numero del personaje)

A[].objetivo.x = 210
A[].objetivo.y = 10
A[].vo = 0
A[].a = 6.8
A[].vf = ?
A[].mipocicion.x = 20
A[].mipocicion.y = 180

con esto calculamos el movimiento a una funcion
es decir
lanzamos la funcion de ataque de mi personaje.
toma en cuenta esto, si funcion es fija, el personaje atacado NO se podra mover
para ello tines que usar una corutina, para que mientras el personaje aque ataca en movido por la funcion ataque
este personaje el atacado pueda moverse de ahi y evitar el ataque
en este caso las corutinas, ayudan a tener mas de un movimiento a la vez, cuando otros son predefinidos, o fijos sin cambio
es decir que si un objetivo es fijo, pero depende de una funcion global, esta no detenga el tiempo para los demas.
es decir, no es correcto poner una funcion de tiempo dentro de mi while principal.
porque, porque todo dependeria de ello.

pro sino manejas corutinas, haz que la funcion global dependa de una opcion de me estoy moviendo o no.
ed decir que la funcion no acabe sino que solo se mueva un punto, y se salga, cuando la vuevlas a llamar
dentro de tu wile, la funcion dira buscar personajes atacando, encontrado, contnuar moviendo, salir.
y asi sucesivamente, dandote tiempo a que tu tambien te muevas pixel por pixel, o seun la cantidad especificada.
es decir, tendras dentro de tu while
las funciones que muevan.


while

balas()
ataques()
mov_personajes()

end


etc..

entonces hay que definir desde donde es el salto, serian varias formulas,
ya que varia si es en caida libre, en salto mayor que la caida, de globito, etc.

trata de leer mas sobre las formulas, pero de todos modos deja leo un poco
y vere si puedo escribir algo rapidito, la verdad nunca he manejado este tipo
de formulas de parabolas.
pero notece que independientemente de que formula se use.
estas tecnicas le daran velocidad a tus juegos.

Imagen de Guillermo_Cornielle

Wao

Me sorprende esto de la fisica, por eso es bueno tener buenos conocimientos de fisica para crera un juego, me trevo a decir que la mayor parte de crera un juego se basa en la fisica, claro dependiendo de clase de jugo sea, pues un quiz ... solo la necesitaria si el quiz fuera de fisica xDDDDD.

Saludos.


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

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.