Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: unbleached en Diciembre 12, 2010, 11:53:54 AM

Título: desplazamiento lateral (solucionado)
Publicado por: unbleached en Diciembre 12, 2010, 11:53:54 AM
hola buenas....me explico....tengo creado un soldado (visto desde arriba) y he conseguido moverlo con los cursores de esta manera
up----speed = 1
down--speed = 0  
left--direction += 2
right-direction -= 2

y en el steep he puesto: image_angle = direction
                       

asi que cuando pulsas up el tio camina......cuando pulsas down el tio camina para atras y cuando pulsas rigth y left el soldado rota sobre si mismo en esa direccion.

Ahora me gustaria con otras dos teclas que el soldado se moviera lateralmente...hacia su izquierda o su derecha....

Alguna idea? muchisimas gracias.Saludos
Título: Re: desplazamiento lateral
Publicado por: juan pablo en Diciembre 12, 2010, 12:59:46 PM
en step
[gml]

if keyboard_check(vk_right){
x+=4
sprite_index = soldado_right
}
if keyboard_check(vk_left){
x-=4
sprite_index = soldado_left
}[/gml]
Título: Re: desplazamiento lateral
Publicado por: unbleached en Diciembre 12, 2010, 01:12:56 PM
poniendo esto en el step del soldado lo que pasa es que cuando pulso right no solo rota hacia la derecha sino que se desplza lateralmente

yo lo que querria es usando otras dos teclas diferentes (por ejemp: el 1 y el 2 del tecldo numerico)el soldado se desplace lateralmente sin rotar.Un saludo y gracias por tu ayuda. igualmente seguire investigando
Título: Re: desplazamiento lateral
Publicado por: juan pablo en Diciembre 12, 2010, 01:18:34 PM
Cita de: unbleached en Diciembre 12, 2010, 01:12:56 PM
poniendo esto en el step del soldado lo que pasa es que cuando pulso right no solo rota hacia la derecha sino que se desplza lateralmente

yo lo que querria es usando otras dos teclas diferentes (por ejemp: el 1 y el 2 del tecldo numerico)el soldado se desplace lateralmente sin rotar.Un saludo y gracias por tu ayuda. igualmente seguire investigando
le cambias la letra o usas (ord) ejemplo
[gml]
if keyboard_check(ord("D")){
x+=4
sprite_index = soldado_der
}
if keyboard_check(ord("A")){
x-=4
sprite_index = soldado_izq
}
[/gml]
se mueve lateralmente ahora con a y d
Título: Re: desplazamiento lateral
Publicado por: unbleached en Diciembre 12, 2010, 01:40:34 PM
jejeje muchas gracias por tu rapida ayuda pero....sigue sin ser exactamente eso


cuando hago lo que tu me dices lo que pasa es que cuando apreto  "d" el soldado se desplaza hacia la derecha de la pantalla, indistintamente de la direccion que el soldado este mirando....yo lo que quiero es que se desplace a su derecha, no a la derecha de la pantalla.No tiene por que ser la derecha del soldado la parte derecha de la pantalla.ejemplo: si mi soldado esta mirando abajo,cuando aprete "d" lo que quiero que pase es que se mueva hacia su derecha...osea nuestra izquierda en este caso(ya que el soldado esta mirando hacia abajo).Y como tu dices siemppre q apreto "d" el soldado se mueve hacia mi derecha.Igualmente muchisimas gracias.
Título: Re: desplazamiento lateral
Publicado por: unbleached en Diciembre 12, 2010, 03:02:04 PM
adjunto lo que tengo

Título: Re: desplazamiento lateral
Publicado por: Fede en Diciembre 12, 2010, 05:37:22 PM
if keyboard_check(vk_right){
x+=4
}
if keyboard_check(vk_left){
x-=4
}

prueba con eso
Título: Re: desplazamiento lateral
Publicado por: unbleached en Diciembre 12, 2010, 05:48:42 PM
gracias por la ayuda pero asi no consigo lo que necesito......con este codigo el soldado se mueve hacia la izquierda o derecha de la pantalla.Vale pero eso no es lo que necesito.Lo que yo quiero es  que el soldado se mueva hacia su derecha o izquierda (no hacia la mia)

imaginaros...con este codigo.....este donde este mirando el soldado...siempre se movera en el eje x...sumando o restando x.....yo quiero que se desplace lateralmente sobre su eje...que no tiene porque ser el eje x.

un saludo y gracias
Título: Re: desplazamiento lateral
Publicado por: Zeneke en Diciembre 12, 2010, 06:00:35 PM
Yo soy tu y cambiaria rotundamente el concepto del movimiento del soldado. Como lo tienes ahora, se parece mas al movimiento de un coche: acelero y freno y giro. A la hora de la jugabilidad se hace bastante ortopedico mover rapidamente al soldado. Yo moveria al soldado en las 4 direcciones y que girara apuntando siempre al rat?n. La verdad que se consigue un muy buen resultado de esta forma.Siempre y cuando quieras apuntar con el rat?n.

Si no sabes como hacerlo te lo explico.
Título: Re: desplazamiento lateral
Publicado por: unbleached en Diciembre 12, 2010, 06:07:36 PM
no no no....no me rendire....se que es posible.

No tengo intencion de disparar donde se?ale el raton.Con lo cual dejando esta opcion en el olvido,si muevo el soldado solo en los dos ejes es imposible (por ejemplo) salir de una esquina andando hacia west y disparando hacia norte.Igualmente seguire investigando y muchisimas gracias por vuestra ayuda.
Título: Re: desplazamiento lateral
Publicado por: Fede en Diciembre 12, 2010, 06:11:55 PM
tengo una idea de como hacerlo pero no se si se puede hacer un codigo con eso xD
deja y te digo
Título: Re: desplazamiento lateral
Publicado por: unbleached en Diciembre 12, 2010, 06:16:11 PM
suerte fede y gracias
Título: Re: desplazamiento lateral
Publicado por: LuisYx en Diciembre 12, 2010, 06:40:59 PM
Te dejo lo que pude hacer porque quiero ponerme a jugar y despues le sigo, pero por mientras te dejo mas o menos un semi resultado. :'(

Título: Re: desplazamiento lateral
Publicado por: unbleached en Diciembre 12, 2010, 06:43:58 PM
buena tio...ahora solo falta que el soldado no se gire....muy muy buena.gracias ya casi lo tenemos .saludos
Título: Re: desplazamiento lateral
Publicado por: lordgeorge en Diciembre 12, 2010, 07:30:32 PM
Creo que solucione el problema, lo unico malo es que lo hice todo con gml, pero espero que te ayude :D

El movimiento queda fijo con Shift y disparas con la tecla Espacio (no le agregue delay al disparo, porque no importa en este caso)

* Quisas este algo desordenado, fue porque arregle los problemas apenas iban pasando xD
Título: Re: desplazamiento lateral
Publicado por: unbleached en Diciembre 12, 2010, 07:35:49 PM
perfecto lordgeorge esto me vale...cambiare el shift a mi gusto pero es exactamente lo que buscaba mil gracias a todos  ;D
Título: Re: desplazamiento lateral (solucionado)
Publicado por: lordgeorge en Diciembre 12, 2010, 07:39:55 PM
De nada, al menos aprendi otro uso del "End Step" xD
Título: Re: desplazamiento lateral (solucionado)
Publicado por: unbleached en Diciembre 12, 2010, 08:17:38 PM
por cierto y para no tener que usar el shit+right o left y usar una tecla para rigth y otra para left....sin aux....pero bueno si es mucho lio se puede quedar asi.Saludos y gracias
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: Fede en Diciembre 12, 2010, 08:31:44 PM
entonces ya esta listo??
porque yo lo hice solo que puse que left y right dieran +15 y -15
asi son menos codigos xD
pero lo quieres de todas formas con +2 y -2
o ya no ya?
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: unbleached en Diciembre 12, 2010, 08:36:55 PM
si please
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: lordgeorge en Diciembre 13, 2010, 03:39:23 AM
Cita de: unbleached en Diciembre 12, 2010, 08:17:38 PM
por cierto y para no tener que usar el shit+right o left y usar una tecla para rigth y otra para left....sin aux....pero bueno si es mucho lio se puede quedar asi.Saludos y gracias
Todo eso se puede y no es dificil de modificar, pero se hace un poco mas largo el codigo. Eso s? lo ideal es que lo modifiques tu mismo, o por lo menos entiendas como solucion? el problema y puedes llegar a otra soluci?n a?n mas simple/entendible (as? se aprende :D)

Cualquier duda del ejemplo pregunta no mas.
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: unbleached en Diciembre 13, 2010, 12:27:47 PM
tienes toda la razon Lordgeorge....no sabria por donde empezar osea que expondre aqui las conclusiones que saco mirando el codigo que me pasaste.

codigo en el step:

//Una forma mejor de codear los controles, asi se ve mejor visualmente an programar.
keyUp=keyboard_check(vk_up)
keyDown=keyboard_check(vk_down)
keyLeft=keyboard_check(vk_left)
keyRight=keyboard_check(vk_right)
keyShift=keyboard_check(vk_shift) //Para mantener la posicion del sprite.
keySpace=keyboard_check(vk_space) //Para disparar.

if(keyUp){
    speed=1
}
else{
    if(keyDown){
        speed=-1
    }
    else{
        speed=0
    }
}
if(keySpace){
    bala=instance_create(x,y,Bala)
    bala.direction=direction
    bala.image_angle=direction
}
aux=keyLeft-keyRight //Es para hacer el movimiento a la izquierda y derecha con el mismo codigo.
if(aux!=0){
    if(keyShift){
        motion_set(direction+90*aux,1)
    }
    else{
        direction+=aux*2
        image_angle=direction
    }
}



codigo en el End step:

if(keyShift){
    direction=direction-90*aux
}


La verdad es que nunca he asignado teclas para mover o disparar usando codigo y lo que deduzco es:

1. que si no aparece la tecla que quiero asignar a un movimiento en el listado de arriba

keyUp=keyboard_check(vk_up)
keyDown=keyboard_check(vk_down)
keyLeft=keyboard_check(vk_left)
keyRight=keyboard_check(vk_right)
keyShift=keyboard_check(vk_shift) //Para mantener la posicion del sprite.
keySpace=keyboard_check(vk_space) //Para disparar.

esa tecla no tendr? ninguna funcion.
con lo cual,lo primero que deberia hacer es quitar el keyShift=keyboard_check(vk_shift)
y a?adir las dos teclas que quiero para el movimiento lateral,una para izquierda y otra para derecha.
Con lo cual, y dando por hecho que yo no se como "se llaman" las teclas, quedaria algo parecido a esto no?:

keyUp=keyboard_check(vk_up)
keyDown=keyboard_check(vk_down)
keyLeft=keyboard_check(vk_left)
keyRight=keyboard_check(vk_right)
key1=keyboard_check(vk_1)
key2=keyboard_check(vk_2)
keySpace=keyboard_check(vk_space)




P.d: existe una lista del nombre de las teclas en algun sitio?Saludos y gracias
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: juan pablo en Diciembre 13, 2010, 01:48:09 PM
solo la de funciones estan como vk_
las letras y simbolos se ponen con (ord(letra)
ej[gml]keyboard_check(ord(w)[/gml]
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: lordgeorge en Diciembre 13, 2010, 02:22:39 PM
Esta en el manual, pero ver ac? es mas r?pido: http://wiki.yoyogames.com/index.php/Keycode_constants
Algunas observaciones:
[gml]//Para los n?meros del teclado num?rico:
key1=keyboard_check(vk_numpad1)
key2=keyboard_check(vk_numpad2)
//Para los n?meros sobre las letras QWERT...:
key1=keyboard_check(ord("1"))//ord('1') --> tambien funcionan esas comillas
key2=keyboard_check(ord("2"))
//Y para las letras:
key1=keyboard_check(ord("Z"))//siempre poner la letra en may?scula --> ord("z") no funciona
key2=keyboard_check(ord("X"))[/gml]
???Por qu? usar esto en ves de lo eventos???
Porque queda mas "ordenado" (depende de cada persona eso s?), y lo mas importante, permite que cada jugador pueda cambiar los controles a su gusto (no te preocupes de eso por ahora xD)
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: juan pablo en Diciembre 13, 2010, 05:42:19 PM
van mas rapido tambien
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: unbleached en Diciembre 13, 2010, 11:24:09 PM
bueno aqui siguen mis avances

he cambiado las teclas de movimento por W-A-S-D y mi intencion es hacer que se desplacen lateralmente con left y rigth


keyW=keyboard_check(ord("W"))
keyS=keyboard_check(ord("S"))
keyA=keyboard_check(ord("A"))
keyD=keyboard_check(ord("D"))
keyLeft=keyboard_check(vk_left)
keyRight=keyboard_check(vk_right) 
keySpace=keyboard_check(vk_space)

if(keyW){
    speed=1
}
else{
    if(keyS){
        speed=-1
    }
    else{
        speed=0
    }
}
if(keySpace){
    bala=instance_create(x,y,Bala)
    bala.direction=direction
    bala.image_angle=direction
}



bueno dando por hecho que no voy a usar aux (supongo) la conclusion que saco es poner esto intentando variarar el original:

if(keyLeft){   
motion_set(direction+90,1)
}

queria ver si con left pasaba algo parecido y quitando el aux....y el resultado es qe cuando apreto left mi soldado no se mueve del sitio pero tiembla jejeje con lo cual no sabria que hacer:Pero sigo intentandolo ;)




P:D: aahhh una cosa....que tendria que poner para que solo saliera una bala cada vez que pulso space y no como ahora que salen todas seguidas? saludos y mil gracias.Espero que este post le sirva de ayuda a mas de uno (ademas de a mi)  :P
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: lordgeorge en Diciembre 14, 2010, 12:03:39 AM
Deja aclarar algo:[gml]//Escribir lo siguiente
motion_set(direction+90,1)
//Es lo mismo que escribir esto, pero ahorrando 1 linea xD
direction=direction+90
speed=1[/gml]
Y como est? en el evento "Step", mientras apretes la tecla el soldado girar? en 90 grados y avanzar? 1 pixel (lo har? 30 veces por segundo si usas room_speed de 30), y eso es lo que ves, el soldado gira sin parar y tiembla. (trata de imaginarte/explicar el c?digo y podr?s resolver los problemas mas f?cilmente xD)
Para solucionarlo, guarda la direccion inicial del soldado, para que despues la retome:[gml]//agregas esto en el inicio del "Step" (debe estar antes de cualquier cambio de direcci?n)
lastDirection=direction
//y pones esto en el "End Step"
if(keyLeft){
   direction=lastDirection
}[/gml]
Con eso funciona sin problemas. Pero debes agregar los otros movimientos ahora.

* Pista: El aux en mi ejemplo lo ?nico que hac?a era cambiarle el signo al valor que multiplicaba (direction+90/direction-90 y +2/-2)
** Adjunto mi ?ltima gran ayuda, agregu? algunas cosas ?tiles incluyendo el disparo limitado, no incluye el movimiento completo como lo quieres... digamos intent? hacer un shooter hace mucho cuando aprend?a GM xD
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: unbleached en Diciembre 14, 2010, 12:34:36 AM
jejejej esto mola

como podras ver he vuelto a cambiar las teclas
8)


lastDirection=direction


keyW=keyboard_check(ord("W"))
keyS=keyboard_check(ord("S"))
keyA=keyboard_check(ord("A"))
keyD=keyboard_check(ord("D"))
keyQ=keyboard_check(ord("Q"))
keyE=keyboard_check(ord("E"))
keyShift=keyboard_check(vk_shift)
keySpace=keyboard_check(vk_space)

if(keyW){
    speed=1
}
else{
    if(keyS){
        speed=-1
    }
    else{
        speed=0
    }
}
if(keySpace){
    bala=instance_create(x,y,Bala)
    bala.direction=direction
    bala.image_angle=direction
}
if(keyQ){   
motion_set(direction+90,1)
}
if(keyE){   
motion_set(direction-90,1)
}
if(keyA){   
direction += 1
speed = 1
}

y esto en el end

if(keyQ){
    direction=lastDirection
}
if(keyE){
    direction=lastDirection
}




he a?adido el

if(keyA){   
direction += 1
speed = 1
}


pero no hace lo que quiero y he probado con image_angle y tampoco.
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: lordgeorge en Diciembre 14, 2010, 12:41:03 AM
Despues contesto, ocupado xD
Adjunt? algo que puede ayudar en el post anterior...
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: Hackware en Diciembre 14, 2010, 06:45:42 AM
@unbleached, te recomiendo que uses el tag de GML.

(http://www.comunidadgm.org/Themes/rt_smf_versatility2_sienna/images/bbc/gml.gif)
... ? ...
[gml][/gml]

Es infinitamente m?s legible que resaltar el GML con rojo... Es s?lo una sugerencia.
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: unbleached en Diciembre 14, 2010, 11:52:50 AM
Cita de: Hackware en Diciembre 14, 2010, 06:45:42 AM
@unbleached, te recomiendo que uses el tag de GML.

(http://www.comunidadgm.org/Themes/rt_smf_versatility2_sienna/images/bbc/gml.gif)
... ? ...
[gml][/gml]

Es infinitamente m?s legible que resaltar el GML con rojo... Es s?lo una sugerencia.

Es verdad tienes razon.Gracias por el consejo.




P.D: Lordgeorge vi tu ejemplo y puede  serme util mas adelante.Gracias tambien.Aunque todavia no he conseguido moverlo como quiero ;)
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: lordgeorge en Diciembre 14, 2010, 01:53:45 PM
As? funciona sin problemas lo que agregaste:
[gml]if(keyA){   
direction+=1
image_angle=direction
}[/gml]
No es necesario ponerle speed para que gire, y el image_angle debe estar condicionado para que no se vea raro al usar "Q" y "E"
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: unbleached en Diciembre 14, 2010, 03:09:59 PM
Ahora si....mil gracias va perfecto ?en el end no tengo que poner nada verdad?
saludos a todos.
Título: Re: desplazamiento lateral (casi solucionado)
Publicado por: lordgeorge en Diciembre 14, 2010, 09:19:09 PM
Nop, el end step en este caso s?lo sirve para el movimiento especial con Q y E. Pr?cticamente ya esta listo el movimiento xD
Título: Re: desplazamiento lateral (solucionado)
Publicado por: Ciberman en Diciembre 16, 2010, 08:36:04 PM
por favor!!

pones

x=lengthdir_x(speedmax,direction-90);
y=lengthdir_y(speedmax,direction-90);

le pones en speedmax la velocidad con que se mueve el soldaado... y para hacerlo para el otro lado le pones +90...

EDIT: uhia, no vi que hab?a una p?gina 2 y 3... pero supongo que la pregunta sigue siendo la misma... creo que no te respondieron usando lengthdir en lo que vi