saludos,
soy novata en esto, estoy empezando y no consigo que mi sprite que esta situado en la parte alta del room, vaya cayendo imagen a imagen para que explote cuando llegue al suelo.
de programación no consigo entenderlo, y lo estoy haciendo con drag&drop,
tengo la version 8.1 lite
:GM8:
os dejo un doc con la imagen del juego y lo que quiero hacer con el sprite
a ver is consigo enterarme de como se hace .
muchas gracias de antemano
:)
Hola !! Por empezar te sugeriria 2 cosas:
1) Empeza a mirar tutoriales de GM por You tube. Eso que estas preguntando es muy basico.
2) Trata de no usar drag and drop, porque te vas a limitar mucho, y es preferible empezar con el codigo cuanto antes asi no perdes tiempo.
------------
Con respecto a lo que preguntas, es simple. Creas un objeto con un sprite determinado. Le pones en la parte "Create" el codigo :
vspeed = 4;
En el evento "Step" pones este codigo:
if place_meeting(x,y,obj_suelo) {
instance_create(x,y,obj_explosion);
instance_destroy();
}
////Ahora crea el objeto "obj_suelo" con su sprite. Y pone de estos objetos en el suelo del mapa.
/// Tambien crea el objeto "obj_explosion" que tenga un sprite de explosion.
En el obj_explosion en el evento "Animation end" pones un codigo que diga "instance_destroy()"
Y creo que con eso estaria :D
Saludos :)
muchas gracias
lo probare y te cuento,
empezare tu curso en cuanto acabe con esto,
un saludo
hola de nuevo :
carlos81 probe el codigo , ok , gracias.
pero lo que quiero es que el sprite que contiene 15 imagenes, vaya cayendo de una en una y explotando cuando toquen el suelo, ¿se puede hacer eso?
como si fuera una lluvia continuada. y que entre imagen 1 e imagen2 .... pasen como unos 3 segundo
me das ideas?
gracias de nuevo
La velocidad de la animación se controla con la variable image_speed. Si quieres que pasen 3 segundos entre cada imagen, debes poner esto en el evento Create:
[gml]image_speed = 1/(3*room_speed);[/gml]
también puedes asignar el valor manualmente, por ejemplo:
[gml]image_speed = 0.02;[/gml]
cuanto dura en el "aire" el objeto? es un valor que cambia o es constante? porque lo digo, porque si quieres que mientras este en el aire repdrodusca el sprite una sola vez abarcando todo el tiempo que esta en el aire, tienes que varios calculos. primero tienes que hallar el tiempo que esta en el aire en step, luego con ese valor tienes que asignar que en ese periodo se reprodusca el sprite que seria
[gml]
image_speed=(image_number/tiempo_en_step_de_caida)
[/gml]
con eso tu objeto adaptaria la speed al tiempo que estaria en el aire, pero como dije antes tienes que calcular el tiempo que estara en el aire, para eso necesitas saber la velocidad de desplasamiento y la altura en el momento en que empieza a caer.
pero para decirte como hacer eso necesitaria mas informacion, como la que ya re dije arriba, si la altura es fija o variable, el brinca o cae de un risco. ese tipo de cosas.
Gracias.seguiré vuestras pautas y veré como fiuncviona.
Jmbs19:
Esperó explicarme con estos datos.
El sprite es un conjunto de alimentos malos. Y están suspendidos en el aire. Deberán estar ocultos hasta q se inicvie la secuencia. Un nos 2 segundos desde el inició de la partida.
1 - el sprite tiene 6 imágenes. Se las colocare en x=270 y=0. Así q la altura será siempre la mismas .
2- explotaran en el suelo ( quizá también pruebe a q reboten) es para q el personaje principal las esquive y no pierda vidas.
3- la primera imagen del sprite saldrá 2 segundos desde q comience la pantalla(hay 3 pantallas)
4- cuando llegue al suelo explota y empieza a caer la segunda imagen.
5- así hasta q acaben las imágenes. Tendrá q esperar 2 segundos más y volver a empezar.
Esperó haberme explicado bien.
Muchas gracias
deja ver si entiendo.
se crea el objeto en la posicion tal, inmediatamente este empieza a caer, con una imagen fija de la fruta del momento, una vez choca con el piso vuelve a la posicion inicial con la siguiente fruta y realiza la misma operacion.
basandome en que tienes un "suelo" llamado obj_suelo puedes hacer lo siguiente
[gml]
//en el create del objeto fruta
fruta=0;
pix=x;//guardamos la posicion inicial tanto en x como en y para devolverlo despues a esta posicion, es una buena costumbre el hacer esto de esta forma porque asi puedes poner este objeto donde sea en el room y siempre ira al inicion donde fue creado y no a una posicion fija en la que todos los objetos apareceran en la segunda caida
piy=y;
image_speed=0;//esto es para "congelar" el sprite
v_caida=4;//esta es la velocidad con la que caera, puede ser cualquier numero, solo te recuerdo que esta velocidad es la cantidad de pixeles que se desplasara por step, y que hay 30 steps por segundo normalmente (a menos que lo cambies).
//dentro de colision con el obj_suelo
instance_create(x,y,obj_explosion)//esto es suponiendo que tu explosion es un objeto
x=pix;//devolvemos la fruta a donde fue creada
y=piy;
if fruta < (image_number-1)//si fruta es menor al numero de subimagenes del sprite asignado al objeto
fruta++;//sumamos 1 a fruta
else//sino
fruta=0;//ponemos en 0 a fruta
image_index=fruta;//asignamos el valor de fruta a image_index
//en step
y+=v_caida;
[/gml]
el codigo de arriba puede ser condensado aun mas, quitando fruta y colocando directamente image_index, pero lo deje asi para que entendieras mejor, de todas maneras te lo deje bastante comentado para que entiendas que hace cada linea de codigo, ademas de eso te dejo una serie de tutoriales hechos por nuestro compañero kostra para comprender la logica de programacion.
http://www.comunidadgm.org/articulos/%28tutorial%29-gml-para-tontos-comprender-a-programar-d/
http://www.comunidadgm.org/articulos/%28tutorial%29-gml-para-tontos-2-pereza-y-mi-programa-con-flou/
http://www.comunidadgm.org/articulos/%28tutorial%29-gml-para-tontos-3-desvariando-con-variables/
muchisimas gracias
lo estudiare, de arriba a abajo.
Y algo de programación sé, html5 , css, javascript, pero lo básico, hice cursos con http://www.appcelerator.com/, para moviles
un curso de html5, para hacer webs, que termine hace poco.Y hace mucho programe con dbase iv, o con ms-dos o basic(1986) y aprendi sola a programar en visual basic(gracias a que por fin se puso de internet de moda, y con ayuda de un monton de foros que me aclaraban cosas,son maestros y pacientes, sin ellos no habria aprendido)
asi que con vosotros aprendere este del gml
me gustan los lenguajes de programación, pero me pierdo con las mates.
hola jmbs
no he conseguido que funcione, creo que faltara algo,
me sale este error
FATAL ERROR in
action number 1
of Create Event
for object obj_pastel:
COMPILATION ERROR in code action
Error in code at line 12:
fruta+1;//sumamos 1 a fruta
^
at position 7: Assignment operator expected.
¿alguna idea?
fruta += 1;
eso ya lo he intentado :( y no me resulta , :'(
da este error
FATAL ERROR in
action number 1
of Collision Event with object obj_suelo
for object obj_pastel:
COMPILATION ERROR in code action
Error in code at line 7:
fruta+1;//sumamos 1 a fruta
^
at position 7: Assignment operator expected.
el problema hay es que estas haciendo mal la operacion. yo no te pase ese codigo de esa forma, de todas maneras es como dijo kostra.
puede ser tanto fruta++; que sumara 1 a fruta a cada step como fruta+=1; que hace exactamente lo mismo como tambien puede ser fruta=fruta+1; las tres funcionan, pero fruta+1 no te va a funcionar porque estas realizando una operacion sin asignarle ese valor a nada, por eso te sale ese problema.
más concretamente, por si no entiendes el mensaje de error... ve a la colisión del obj_suelo con el obj_pastel, ve a la linea 7 y cambia pastel+1 por pastel+=1
Lo que dice jmbs, eso de pastel++ solo funciona en game maker studio, así que si usas otra versión, no lo uses
lo cambie,
ahora me sale este error :
ERROR in
action number 1
of Step Event
for object obj_pastel:
Error in code at line 2:
y+=v_caida;
^
at position 5: Unknown variable v_caida
¿puede ser que con el gm que tengo le pase lo mismo que al anterior error?
para que me aclareis mas, ya que soy muuu dura de mollera.
por que en //en step poneis
y+=v_caida;
eso no significa que la y toma el valor de la caida mas ???
siempre me lio con los +, ++, ==.....
muchimas gracias por vuestra paciencia.
chicos, que soy mu torpe, aunque me esfuerzo mucho,
copie el programa al pie de la letra en donde marcas (jmbs)
en create : fruta(aunque la llame pepito) los px y py, y la velocidad.
en colision con el suelo: create instance, x, y , v_caida, y el if
y en step, el y+=v_caida
creo que no me olvide de nada
los siento, pero no consigo ver el error o el fallo que tengo.
lo dejare durante un rato(4 horas) a ver si a la vuelta descubro el que o me decis en que me he equivocado
buena tarde, hasta la noche
gracias
el error fue mio, por alguna razon coloque el v_caida=4 en la colision, cuando tiene que estar en el create, tu ultimo mensaje fue lo que me hizo darme cuenta de eso.
de todas maneras ya corregi el mensaje anterior, copialo y pegalo otra vez o simplemente en lo que ya tienes pon el v_caida=4 en el create y quitalo de la colision.
gracias lo probare
y siempre 4 ojos ven mas que dos. igual que es conveniente que lea otro lo que has escrito o desarrollado, pues al escribir terminamos poniendo muchas veces palabras repetidas, o puntos o comas donde no debemos.....
muchisimas gracias, mañana os cuento
lo probe, OK, FUNCIONA, MUCHAS GRACIAS
y ya que estoy , aunque lo puedo poner como otro tema .
como soy una chica curiosa, y aunque no se si lo utilizaria en este juego, ¿como se haria para que en vez de bajar solo verticalmente (hacia el 270º) pueda caer en diagonal o haciendo una curva, como si fuera la bala de un cañon?
mis mates andan casi perdidas, supongo que sera usar algún tipo de fórmula.
un saludo y miles de gracias chicos
Ja, ja xD, ¿Qué nadie lee las reglas? xD, una sola pregunta por tema xD
En fin. Lo que puedes hacer, suponiendo que la caída se haga de la forma y += algo, podrías hacer de la misma forma pero con x.
Digamos, quieres que caiga en 225º, pues:
[gml]
y += algo;
x -= algo;
[/gml]
quieres que caiga en 315º, pues:
[gml]
y += algo;
x += algo;
[/gml]
quieres que caiga en 202.5º, pues:
[gml]
y += algo;
x -= (algo/2);
[/gml]
quieres que caiga en 292.5º, pues:
[gml]
y += algo;
x += (algo/2);
[/gml]
Y así con todos. Sólo debes calcular un poquito la relación de movimiento horizontal:vertical para dar en el ángulo que desees
jajaja las reglas son como el acepto de los programas jajaja no se puede leer la letra pequeña
suponia que tendria que abrir otro tema. pero es que estais tan a mano que me parecia perder el tiempo . pero lo prometo no lo volvere a hacer.
seguro que hay algun tema mas con esta referencia, asi que me disculpo a los moderadores , recogez mi disculpa.
gracias a todos,
buenas noches
ahora voy en busqueda de mas cosas jajajaja (barra de vida, de puntos........)
se me olvidava ¡PROBLEMA RESUELTO!
eso de resuelto se pone en el título, dándole a editar al primer mensaje xD
gracias,
no te acostaras sin aprender una cosa nueva,