Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - Mgbu

256
Preguntas y respuestas / Re:Apuntar lanzado
Octubre 22, 2012, 07:04:39 PM
Ahora lo dejo ordenado por si a alguien le sirve, el problema que tenía era que en matemática el eje Y va hacia arriba, pero en las computadoras va hacia abajo XD, luego necesitaba adaptar un poco para que funcione también si el objetivo está a la izquierda.
Así quedó:

[gml]

//DATOS/////////////////////////////////////////////////
v=10 //Velocidad de disparo                           //
g=0.2 //Gravedad                                      //
xj=abs(obj_jugador.x-x) //Posición X del jugador      //
if xj=0 exit //Para prevenir una división por 0       //
yj=obj_jugador.y-y //Posición Y del jugador           //
////////////////////////////////////////////////////////
/*
Tener en cuenta que la ecuación tiene 2 soluciones, una para un disparo más directo y otra para un disparo más alto,
este ejemplo está listo para el disparo directo que es más efectivo, para obtener el otro disparo se debe cambiar el
signo - que está entre el 1 y la raíz, justo como se ve en la ecuación comentada
También si el resultado de lo que va destro de la raíz cuadrada da negativo significa que el objetivo está fuera de
alcance, por eso el exit
*/
//ECUACIÓN//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
raiz=1-((2*g*-yj)/(power(v,2)))-((power(g,2)*power(xj,2))/(power(v,4))) //Contenido de la raíz cuadrada                       //
if raiz<0 exit //Si devuelve un numero menor que 0 significa que el objetivo está fuera de rango                              //
                                                                                                                              //
direccion=arctan(((power(v,2))/(g*xj))*(1-sqrt(raiz))) //Terminamos de calcular la ecuación para disparo directo              //
//direccion=arctan(((power(v,2))/(g*xj))*(1+sqrt(raiz))) //Terminamos de calcular la ecuación para disparo indirecto          //
                                                                                                                              //
direccion=radtodeg(direccion) //Pasamos el resultado a grados                                                                 //
if obj_jugador.x<x direccion=-direccion+180 //Si el objetivo está a la izquierda espejamos el ángulo (Gracias Jairo Honorio)  //                                                                                                                         
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


if reload=0 { //Si el arma esta recargada
    bala=instance_create(x,y,obj_bala) //Crear la bala
    bala.speed=v //Poner su velocidad...
    bala.gravity=g // ...su gravedad...
    bala.direction=direccion // ...y su dirección
    reload=50 //Descargar el arma
}

reload-=1 //Recargar el arma lentamente
image_angle=direccion //Dibujar la torreta con el angulo de disparo
[/gml]
Eso obviamente va en step

Listo, dejo un ejemplo adjunto y algunas tags para el buscador XD

CitarProyectil, Disparo, Gravedad, Calculo, Parabola, Calcular, Lanzar, Lanzado, Lance, Objetos
257
Preguntas y respuestas / Re:Apuntar lanzado
Octubre 21, 2012, 05:52:59 PM
Atención base Houston, tenemos un problema! XD

Transcribí esa ecuación a código, parece que no tengo problemas con las unidades (por ejemplo px/step > m/s) porque funciona perfectamente si el jugador está en la misma Y que el enemigo, el problema viene cuando el jugador sube o baja. Cuando el jugador está arriba los tiros no llegan, y cuando está abajo se pasan de largo, como si tirara depreciando la Y del jugador.

Te adjunto el jueguito, pasé lo que importaba a un nuevo editable para que no influya nada externo, acá también te muestro la ecuación real, y mi adaptación. Puse paréntesis por todos lados XD


v=10
g=0.2
xj=obj_jugador.x-x
yj=obj_jugador.y-y

direccion=arctan(   ((power(v,2))/(g*xj))*(1+sqrt(1-((2*g*yj)/(power(v,2)))-((power(g,2)*power(xj,2))/(power(v,4)))))  )



No te preocupes si l ecuación no sirve al irse del lado izquierdo del enemigo, eso lo arreglo con unos if


EDIT: Ya esta, necesito ayuda para arreglar el dibujado y termino, pero lo de trayectorias lo arreglé, dentro de poco publico un ejemplo por si alguien necesita
258
Juegos completos / Re:One minute to die
Octubre 21, 2012, 02:54:00 PM
No tiene algo que ver con el juego que había en el portal Online? (ahora que leo el comentario de elvis aclaro que era sin ironia, no me acordaba del juego 7 minutos XD)
Llegué hasta ese nivel que mostras en la primera imagen, no puedo creer que hayas llegado ahi con 27 segundos XD
El unico bug que encontré me pareció bastante molesto, se nota bien en el primer nivel, porque colisionas desde abajo con las espinas, aunque no lo choques bien de abajo si no rozando la pared
259
Desarrolladores / Re:Impactar Games Entertainment
Octubre 21, 2012, 02:51:05 PM
Ese logo y ese juego se ven muy bien! Se ve muy profesional, felicitaciones! :D
260
Preguntas y respuestas / Re:Apuntar lanzado
Octubre 21, 2012, 02:36:06 AM
Ahh, perfecto, esa formula esta muy buena, no la aprendi todavia en la escuela XD
Me expliqué un poco mal, la torreta apunta para disparar hacia donde se encuentra el personaje, y como la bala sale siempre a la misma velocidad V0x y V0y puedo relacionarlas dejando una sola como incognita, el problema es el tiempo, por lo que me parece mejor poner un tiempo mas o menos elacionado con la distancia y listo.
Ahora me voy a poner a ver como va, si encuentro un problema aviso

EDIT: Encontré justo lo que necesitaba, es esto:
Eso me da el ángulo para la velocidad de salida que quiero, gracias por guiarme porque no sabia nada de esto ;D
261
Juegos completos / Re:Pacman 3D (fps)
Octubre 21, 2012, 02:31:55 AM
Ahh, otra cosa que se me ocurrio es hacer que vaya siempre por el medio del camino, porque va desfasado depende cuando doblas
262
Juegos completos / Re:Pacman 3D (fps)
Octubre 20, 2012, 09:16:47 PM
Casi me agarra un infarto cuando doblé y vi un fantasma amarillo que ocupaba toda la pantalla :o
Como juego está bien, pero podés agregar un mapa opcional, y si te sale podés hacer una animación al girar (que vaya girando en vez de doblar instantáneamente)
263
Preguntas y respuestas / Apuntar lanzado
Octubre 20, 2012, 07:53:44 PM
Es difícil, lo que necesito es que el enemigo sepa apuntar bien para que al lanzar un objeto (que va cayendo) pase por un punto especificado, o sea las coordenadas del jugador, acá hay una imagen para que se entienda:


Intenté hacerlo pero no pude, intente buscando la forma de hacerlo usando las ecuaciones de fisica de caida libre y tiro vertical. Las cosas importantes son que los disparos salen siempre con la misma velocidad, si se les hace mas facil regulando la velocidad del objeto no hay problema. Y la gravedad es siempre la misma (0,2) y va hacia abajo

¿Se les ocurre alguna forma? No tengo problema en hacerlo yo, me gustaria para prender, a lo mejor qon una pista me sale
Si prefieren hacerlo ustedes ¿Necesitan el editable o saber los tamaños de los objetos, la gravedad y eso? No tengo problema en darle algo
Si no se puede hacer exacto no hay problema, buscaría la forma de adaptar el arma (hacer como un cluster no estaria mal) mientras que no erre demasiado jaja
264
Justo estaba viajando, por eso no respondí, bueno, si funciona esta bien :D
265
Ah, había entendodo un poco mal XD

Ya está, te hice un ejemplo para asegurarme de que no haya errores y lo adjunté, fijate que a la tabla la escribí en create, vos ya la tenés hecha, y fijate que en el step tenés que cambiar un 3 por la cantidad de filas que tengas

Cuando lo juegues no va a haber nada, vas a tener que esperar a que pasen 4 segundos porque es el primer evento, luego un segunto más para el segundo evento y un poco más para el tercero.
También conviene que a los segundos en la tabla no los escribas con respecto al evento anterior, si no respecto al tiempo total, por ejemplo:

Asi no:
3, 1, 5

Así:
3, 4, 9

Eso te va a ahorrar tener que programar más XD
266
Funcionó? Mgbu se pone triste cuando resuelve una pregunta y no obtiene respuesta XD
Si no entendiste algo pregunta que no hay problema
Cita de: Mgbu en Octubre 16, 2012, 11:41:29 PM
Probando ya sé, tenés varios tiles con el mismo ID, por ejemplo así:
tile=tile_add(tile1,1,1,64,64,x,y,0)
tile=tile_add(tile1,1,1,64,64,x+64,y,0)
tile_set_alpha(tile,0.2)

Eso va a hacer transparente al segundo tile porque estás sobreescribiendo el valor de la variable "tile". eso se arregla así:
tile=tile_add(tile1,1,1,64,64,x,y,0)
tile_set_alpha(tile,0.2)
tile=tile_add(tile1,1,1,64,64,x+64,y,0)
tile_set_alpha(tile,0.2)

267
Hola de nuevo! XD

A eso te lo había explicado muy cortito, fue mi error :D, por eso lo acomodé a lo que necesitás ahora.
se me ocurre que pongas esto en un script nuevo, facilitará mucho todo. Creá un script y de nombre ponele "obtener_accion" (o el nombre que te guste), y adentro pegá esto:
Cita de: Mgbu en Septiembre 26, 2012, 11:02:22 PM
Por ejemplo para vos saber el color del enemigo en el instante pedido primero tenés que saber en qué fila está el instante, así que vas buscando una por una con un for, sería algo así
[gml]
instante=argument0 //Este es el instante a usar
fila=-1 //El valor predeterminado, cuando no existe el instante 3500 devuelve la fila -1, para indicar que no existe
for (i=1;i<=cantidad_filas;i+=1) {
    if tb_ds[1,i]=instante fila=i //La columna es 1 porque es la columna con los milisegundos, se fija si ese casillero tiene escrito el instante pedido, si es así devuelve la fila
}
//Ahora que sabemos la fila buscamos el valor de la columna 2 en la fila conocida:
if fila !=-1 return array[2,fila] //Si existe ese instante ahora devuelvo lo que hay que hacer en el instante pedido
else return -1 //Si no existe el instante pedido devuelvo -1
[/gml]

Ahora cerras el script, cuando en el juego necesites saber que hay que hacer en un momento dado llamás a la siguiente función o script, que es lo que hicimos recién, entonces para saber qué hacer en el momento 3500 escribís
accion=obtener_accion(3500)

Obviamente vas a necesitar obtener la acción del instante actual, creo que en tu caso sería tuempoAcumulado, entonces:
accion=obtener_accion(tiempoAcumulado)

Luego hay que hacer algo con ese numerito, entonces con un switch me fijo que hacer:
switch (accion)
case 0: {
    //Código para cambiar color a enemigo 1
}
case 1: {
    //Guardar numero de disparos
}
case 2: {
    //Hacer aparecer a una vida
}

etc.



La cosa es que depende cómo escribiste los tiempos, si en la tabla escribiste los tiempos en segundos vas a tener que llamar al script con "segundosAcumulados" o algo así, el problema es que hay 30 steps por segundo, entonces la acción se realizará 30 veces juntas, por eso llama al script una sola vez por segundo, eso se puede hacer sabiendo si el step actual es multiplo de la room_speed, entonces sería así:
if (tiempoAcumulado mod room_speed=0) accion=obtener_accion(segundosAcumulados) //mod es para calcular el resto de una división

Ojalá funcione, lo estoy haciendo todo a ciegas ;D
268
No es agregar ni quitar una regla, es solo añadir una recomendacion a la gente que pregunta
Porque por lo menos a mi se me hace mucho mas facil resolver un problema si me adjuntan su juego, porque es muchas veces que tengo un error lo arreglo probando varias veces, ya sea porque son varios errores o porque el error no es tan facil de arreglar. Tambien el error puede estar en algo que el que pregunta no especifica, y el uso del modo debug es muy util

Así que se me ocurre agregar una oracion asi como:
"Recuerda que tu editable es muy util para ayudarnos a resolver tu problema"
Asi nomas, sin obligar, si ustedes estan de acuerdo
269
Cita de: blastychan en Octubre 18, 2012, 12:51:23 AM
Tenía un dilema, y era que si ponía el evento Draw en el Player1 me reemplazaba el sprite del jugador.
Ah si, no sé por qué el Game Maker cuando uno agrega el evento Draw deja de dibujar al objeto
Para que no suceda, en ese draw hay que dibujar al jugador, lástima que hay que hacerlo con código. Agrega un "Add a piece of code" (está en la pestaña Control) y adentro pegá esto:
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha)
No hace falta que te aprendas que dice por ahora XD

Es mejor que dibujes la barra con el objeto player1 porque es más rápido, simple y además si dibujás con otro objeto vas a ver que la barra va un poco atrasada cuando el jugador se mueve
270
Preguntas y respuestas / Re:Reloj interno
Octubre 17, 2012, 11:51:46 PM
Encontré el error! 8)

El problema es en la primera linea del create, borrala. No me había dado cuenta del error porque nunca uso la parabra "var", en Game Maker no hace falta declarar variables, simplemente asignales un valor
Yo también creía que era para declarar variables, pero las declara sólo para esa pieza de código y luego las borra, mira loq ue dice en el manual:
CitarA veces quieres variables que solo estén dentro del actual piece of code o de un script. De esta manera evitas perder memoria y estás seguro que no hay ningún conflicto con los nombres. Esto es también más rápido que usar variables globales. Para hacer esto debes declarar las variables en el comienzo del código, usando la palabra "var". Esta declaración se ve así:
var <nombrevariable1>,<nombrevariable2>,<nombrevariable3>, ...

Entonces borra eso y debería funcionar, el create quedaría simplemente así:
contadorFrame = 0;