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 - Clamud

256
Una aplicación en videojuegos es la famosa función Fast inverse square root. Sin embargo, no se puede usar con GML porque al hacer corrimiento de bits en un número flotante, se convierte a entero.

Otra aplicación son las banderas o flags. En lugar de utilizar muchas variables booleanas (true o false) se utiliza una sola variable donde cada bit tiene un significado. Por ejemplo, se puede usar una variable powerups, donde cada bit representa el powerup que se ha desbloqueado.

Como menciona Johann, el desplazamiento de bits es una forma rápida y económica de dividir y multiplicar por potencias de 2.
bar << 2 es equivalente a bar * 4
bar >> 1 es equivalente a floor(bar / 2)

Yo lo he utilizado para guardar el estado de los botones de diferentes mandos y detectar los press y release con las operaciones and y not a nivel bit.
[gml]
global.inputPrev = global.input; //update prev
global.input = 0; //clear

for( i=0; i<16; i++ )
   global.input |= scJoystickCheck(global.inputCode[2,i]) << i;

global.inputPress = global.input & ~global.inputPrev;
global.inputRel = ~global.input & global.inputPrev;
[/gml]
257
Recuerdo que estás trabajando en un juego similar a Gunsmoke. Lo que entiendo es que al hacer la animación de disparo la animación de correr no continúa en la sub-imagen en la que se quedó. La solución más simple que se me ocurre es hacer que los dos sprites tengan el mismo número de sub-imágenes.
258
Si el movimiento es en 2 dimensiones, lo más fácil es usar el sistema de física.
Si es en 1 dimensión, como empujar una caja sobre el piso, puedes seguir estos pasos:

  • mover al personaje
  • detectar colisión con la caja y mover la caja si es necesario
  • la caja detecta colisión con otros bloques y se mueve a una posición sin colisión
  • al final el personaje detecta colisión con otros bloques y cajas y se mueve a una posición sin colisión
No tengo un código a la mano. Puedes buscar en el foro, recuerdo que esto se ha discutido algunas veces.
259
Preguntas y respuestas / Re:Direction con mando Xbox
Noviembre 21, 2018, 06:09:31 AM
En el evento Create asigna los valores por defecto de las variables velocidad y direction
[gml]
velocidad = 0;
direction = 0;
[/gml]
No se si direction es realmente necesaria, porque el valor se copia a la variable speed.

En el evento Step actualiza los valores solo si los ejes están fuera del centro
[gml]
gamepad_set_axis_deadzone(0, 0.5);
var haxis = gamepad_axis_value(0, gp_axislh);
var vaxis = gamepad_axis_value(0, gp_axislv);
if (haxis <> 0 or vaxis <> 0) {
    direction = point_direction(0, 0, haxis, vaxis);
    velocidad = point_distance(0 ,0, haxis, vaxis) * velocidadMax;
}
[/gml]
260
Preguntas y respuestas / Re:Boton en Draw_GUI
Noviembre 18, 2018, 06:26:59 PM
La capa GUI tiene un tamaño independiente de la view y el port.
Cambia el tamaño de la GUI al inicio del juego. Lo recomendable es darle el mismo tamaño de la view para que todos los gráicos tengan la misma escala.
[gml]
display_set_gui_size(view_wview[0], view_hview[0]);
[/gml]
261
Preguntas y respuestas / Re:Boton en Draw_GUI
Noviembre 18, 2018, 05:47:22 PM
Mejor usar
[gml]
device_mouse_x_to_gui(0);
device_mouse_y_to_gui(0);
[/gml]
262
Juegos completos / Re:Lab 23 [Windows]
Noviembre 10, 2018, 06:05:13 AM
Creo que falta una descipción de los controles, ¿cómo se usa la pistola?
263
Sí, creo que a veces necesita descargar algo relacionado con maven. Pero no se con qué frecuencia se debe descargar.
264
Escibe "endless" en el buscador del foro y encontrarás varios temas relacionados.
265
¿El objeto V_Juger debe actuar como una pared? Puedes hacer que sea un hijo del objeto pared.

En el primer bloque de código creo que sobran llaves, así sería mejor:
[gml]
if poder_electricidad == true{  //juger
  if mejora_juger == false{
    if keyboard_check_pressed(ord("E")) //Revisa que hayas pulsado E
    {
      var mas_cercana_juger = instance_nearest(x, y, V_Juger); //Recibe el ID del object8 más cercano
      if distance_to_point(mas_cercana_juger.x ,mas_cercana_juger.y) < 32 && global.points >= 2500
      { //Revisa mi distancia hacia el object8 más cercano y verifica que tenga dinero suficiente
        global.points = global.points - 2500
        mejora_juger = true
        vida_maxima = vida_maxima + 75
        vidas = 175       
      }
    }
  }
}
[/gml]
266
Preguntas y respuestas / Re:Alarma en relación a los FPS
Noviembre 05, 2018, 02:00:22 PM
Debes utilizar la variable fps.
fps_real indica la cantidad máxima de fps a la que puede correr el juego. Normalmente solo se alcanza con una room vacía.
No deberías hacer que la pantalla de carga tarde 5 segundos, podría ser desesperante para el jugador.
Para optimizar el juego utiliza el debugger o activa la barra de consumo de recursos: show_debug_overlay(true);Observa qué parte del juego consume más recursos y trata de optimizar esa parte.
267
Preguntas y respuestas / Re:gml_release_mode
Noviembre 05, 2018, 01:50:51 PM
Creo que solo es bueno usarlo cuando el juego ha pasado por muchas pruebas y parece que no tiene bugs. Si alguien rueba tu juego y crashea sin dar información, será más difícil arreglarlo.
268
Una forma de distribuir uniformemente es utilizar el sitema de física:
Los objetos pequeños pueden tener fixtures simples (recomiendo la forma circular).
El área que encierra los objetos puede estar definida con una cadena de aristas.

Ejemplo en GMLive
Haz clic para crear instancias con forma y color aleatorios.

En tu juego las instancias se pueden crear en un ciclo for en el centro de la figura grande. Es necesario variar ligeramente la posición de las instancias, porque si no, es posible que el vector de esplazamiento.sea cero.
El contorno de la figuras grandes se puede definir con paths, así se puede usar el editor de paths y no se deben escribir los números a mano.
Las instancias se mueven al crearse y después se estabilizan. Si no quieres que se vea eso, puedes poner una pantalla de carga.
269
Se puede portar un código como este
https://learn.adafruit.com/secret-knock-activated-drawer-lock/overview
https://learn.adafruit.com/secret-knock-activated-drawer-lock/code

El ritmo se guarda como un array, pero los tiempos no se guardan en segundos (o submúltiplos de segundo), se guardan como porcentajes.
El tiempo más grande entre toques se toma como el 100% y a partir de esa duración se calculan los demás valores.
De esa forma se puede tocar el mismo ritmo con un poco de variación en la velocidad.
Existe un tiempo máximo entre toques, si se sobrepasa ese valor la detección se cancela, por lo que no es posible detectar un ritmo si se toca demasiado lento.
También existen dos valores que permiten ajustar la sensibilidad.
270
No se lo que provoca que quede desordenado.

Si escribes a mano un ini ordenado, al cambiar un solo valor se desordena. Al parecer GMS mantiene el ini en memoria en una estructura de datos especial que no tiene orden, pero permite agregar y borrar llaves de forma rápida y eficiente. Si se cambia un valor vuelve a escribir toda la estructura de datos en el archivo.