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 - 3dgeminis

256
Preguntas y respuestas / Re:problema colision
Agosto 21, 2018, 03:57:00 PM
Que codigos estas usando ?
257
Cada sprite tiene un origen, un centro el cual puedes colocar donde quieras, y esto lo puedes cambiar en el editor de sprites
258
Eso es debido a que en la colision no detenes la velocidad vertical si no que la igualas a 12 cuando deberia ser 0
[gml]
move_contact_solid(direction, 12)
vspeed= 0;
[/gml]
Algo que note, es que usas keyboard_check_pressed siendo una funcion que se ejecuta una vez para mover al personaje, lo mejor seria usar keyboard_check.
259
Preguntas y respuestas / Re:girar un objeto
Agosto 05, 2018, 07:47:58 PM
La velocidad=distancia/tiempo y en base a esa formula hice un ejemplo, donde la distancia es igual a la distancia entre el punto donde se presiona con el dedo y el punto donde se deja de presionar, el tiempo es el numero de steps entre esos dos momentos.
[gml]
//CREATE

mx=0
my=0
velocidad=0
distancia=0
tiempo=0
[/gml]
[gml]
//STEP

if velocidad=0
{
  if mouse_check_button_pressed(mb_left)
     {
      tiempo=0
      distancia=0
      velocidad=0
      mx=mouse_x
      my=mouse_y
     }

  if mouse_check_button(mb_left) { if (mx!=mouse_x and my!=mouse_y) {tiempo+=1} }

  if mouse_check_button_released(mb_left)
     {
      distancia=round(point_distance(mx, my, mouse_x, mouse_y))
      if tiempo>0 {velocidad=round(distancia/tiempo)*sign(mx-mouse_x)}
     }
}

velocidad=velocidad*0.98
if abs(velocidad)<0.1 {velocidad=0}

image_angle+=velocidad
[/gml]
No es perfecto pero funciona.
260
Prueba de esta manera:
[gml]
instance_create(irandom_range(0, room_width), irandom_range(0,room_height), obj_enemy)
[/gml]
Revisa en el manual la funcion irandom_range para saber mas
261
En el momento se me ocurren estas 2
https://www.aprendegamemaker.com/gml/page/6/
https://www.escueladevideojuegos.net/category/tutoriales-game-maker/page/2/
En esta misma pagina hay mucha informacion para aprender http://www.comunidadgm.org/articulos/
Un recurso muy importante y que a veces se deja de lado EL MANUAL, trata de leerlo seguido e ir aprendiendo de a poco la funciones que tiene el programa (si usas el GM8 trata de conseguir el manual del GMS, esta mucho mas completo y exlica mejor, y por ahi hay una traduccion al español
262
Larga D&D y empeza a usar gml, el mejor consejo que cualquiera te pude dar 8), en poquito tiempo le agarras la mano.
Hay 3 articulos para empezar a programar:
http://www.comunidadgm.org/articulos/(tutorial)-gml-para-tontos-comprender-a-programar-d/
http://www.comunidadgm.org/articulos/(tutorial)-gml-para-tontos-2-pereza-y-mi-programa-con-flou/
http://www.comunidadgm.org/articulos/(tutorial)-gml-para-tontos-3-desvariando-con-variables/

Pues para tu pedido un poco de gml:

EVENTO CREATE
[gml]
sprite_caminar=0 ///0=sprite quieto, 1=sprite caminar derecha, 2=sprite caminar izquierda
[/gml]
EVENTO STEP
[gml]
if keyboard_check(vk_right) ///si se aprieta derecha
  {
   x+=4  ///se mueve 4 pixels
   sprite_caminar=1 ///la variable se pone a 1
  }
 
if keyboard_check(vk_left)
  {
   x-=4
   sprite_caminar=2
  }
 
if ( !keyboard_check(vk_right) and !keyboard_check(vk_left) ) {sprite_caminar=0} ///si no se apretan ni derecha ni izquierda

///cambio de sprite segun el valor de la variable sprite_caminar
switch(sprite_caminar)
  {
   case 0: sprite_index=spr_quieto break ///si sprite_caminar=0 se cambia el sprite a spr_quieto
   case 1: sprite_index=spr_derecha break
   case 2: sprite_index=spr_izquierda break
  }
[/gml]
263
Para el primer error, lo que hago es usar variables para saber en que estado esta el personaje y uso esas variables para controlar que sprite elegir a cada momento. Supongo que debes estar cambiando los sprites cuando presionas una tecla ?.
El segundo error como tu dices debe ser un problema en el codigo de colisiones o/y en la mascara de colision.
Como guia primero has que funcione bien el movimiento y colisiones usando solo un sprite simple(un rectangulo o circulo)
y luego que todo funcione bien avanza a el cambio de sprites.
Pon el codigo que usas en el objeto para ayudarte mejor
264
La solucion es simple, tenes 2 puntos, la posicion del jugador y la posicion en donde se cliquea con el raton, si la distancia entre ellos no es igual se mueve al jugador a la posicion del raton.
La posicion del raton se guarda en 2 variables cuando se presiona con el raton en cualquier parte.
Luego se comparan ambas posiciones y dependiendo del resultado se mueve o no.
[gml]
// CREATE EVENT ////////////////////////////////////////////////////////////////////////////////////////////////////////

destino_x=x
destino_y=y
velocidad=4

// STEP EVENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////

if mouse_check_button_pressed(mb_left)
  {
   destino_x=mouse_x
   destino_y=mouse_y
  }

if point_distance(x, y, destino_x, destino_y)>velocidad {move_towards_point(destino_x, destino_y, velocidad)}
else {speed=0}
[/gml]
265
Desarrollo de Scripts / Re:Diferencia de angulos
Julio 22, 2018, 12:50:04 AM
Aun lo sigo usando 8), y no soy el unico. Me siento mas comodo al usarlo que las nuevas versiones(todavia no me acostumbro al GMS)
266
Desarrollo de Scripts / Diferencia de angulos
Julio 20, 2018, 04:05:59 AM
Autor: 3dgeminis

Versión de GM utilizada:  :GM8:

Descripción: Devuelve la diferencia entre 2 angulos.
Hace lo mismo que la funcion angle_difference de Game Maker Studio y sirve para GM8 y versiones anteriores.

Para que el script funcione correctamente, el valor de los angulos debe estar entre 0 y 360 grados.

Código del Script:
[gml]
angulo1=argument0 ///primer angulo
angulo2=argument1 ///segundo angulo

dif_ang=(angulo2 - angulo1) ///se restan los angulos

///el valor de dif_ang se fija entre los angulos 180 y -180
if dif_ang<-180 {dif_ang+=360}
if dif_ang>180 {dif_ang-=360}

return dif_ang ///devuelve la diferencia entre los angulos
[/gml]

Ejemplo de utilizacion:
[gml]
///Girar un sprite hacia donde apunta el raton

///STEP EVENT
ang=point_direction(x,y,mouse_x,mouse_y)

if image_angle>360 {image_angle-=360}
if image_angle<0 {image_angle+=360}

dif=diferencia_angulos(image_angle,ang)

image_angle+=min(abs(dif), 5)*sign(dif)
[/gml]
267
Por lo que se esta heho de varios sprites y se juntan para formar al personaje, se puede ver como por ejemplo dispara con el arma en el brazo derecho mientras con el izquierdo se lanzana granadas. Otro ejemplo son las piernasque estan separadas del resto del cuerpo.
268
Preguntas y respuestas / Re:balas y disparo
Julio 15, 2018, 07:32:41 PM
Todos empezamos asi, no te desanimes y continua practicando 8)
Empeiza por no poner parentesis en todos lados, solo cuando una funcion te lo diga, te vas a ahorrar dolores de caveza cuando te salte un error y tengas que revisar en donde te falto uno.
Prueba a escribir de la forma que puse en mi anterior respuesta.
269
No pude hacerlo funcionar usando un script, pero si coloco el codigo directamente en el objeto funciona
[gml]
if mp_grid_get_cell(global.mapa, x div casilla, y div casilla)==-1 {instance_destroy()}
[/gml]
270
Busca en la AYUDA la funcion mp_grid_get_cell, viene con un ejemplo que es lo que necesitas.