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

121
Hola Yuzo

Es perfectamente posible, simplemente coloca:
with (instance_create(x, y, obj_enemigo)) {
image_xscale = other.image_xscale
}


El cambio en la escala se hace después de ejecutar el create event del objeto creado, así que si usas un if a la image_xscale en el evento de creación, no funcionará.

Saludos
122
Preguntas y respuestas / Re:Referencias en GameMaker
Octubre 17, 2018, 01:10:58 AM
Hola empardopo

Yo no sé mucho de programación, así que no puedo comparar GM con otro lenguaje u otro programa. Si lo que quieres es encontrar en qué bloque de código has escrito tal script, puedes usar el buscador de Game Maker. "Scripts > Search in scripts", o el atajo "Control + Shif + F".

Si no era eso y quieres saber qué objeto está corriendo cierto código, simplemente llama "object_index" y devuelve el objeto.

Si no es ninguna de las dos, no he entendido la consulta, sorry.

Saludos
123
Hola PaulleXd

Perfecto, ahora entiendo la utilidad del array, que era para mapear 2 o más teclas al mismo botón.
Que bueno que hayas solucionado el problema

Saludos
124
Preguntas y respuestas / Re:dibujar movimiento
Octubre 14, 2018, 08:39:11 PM
Hola Sr.Mojon

Por lo general los códigos no son genéricos ni llegar y copiar, los debes adaptar a tus variables, tus necesidades, tus posiciones, tus velocidades, etc.

Y si no nos comentas el error que te aparece, no podremos saber qué está mal ni cómo ayudarte, intenta especificar mejor el error que te está mostrando Game Maker para identificar el problema y encontrar una solución.

Saludos
125
Hola PaulleXd

Ahora entiendo tu problema, pero no entiendo tu código, lo veo algo extraño aunque si te funciona supongo que está bien.
Por defecto, Game Maker elimina las virtual Keys cuando cambias de room, entonces las debes declarar de nuevo.

Sugiero en el "Room End Event" de cada objeto tecla (o del objeto padre, porque así lo correrán los hijos también) colocar:
vk_key_set = false

Eso hará que al entrar en la siguiente room, se ejecute de nuevo el Step Event y se genere un nuevo mapeo de teclas.

Encuentro extraño tu código, porque según yo cada tecla (u objeto en tu caso) debe mapear una posición.
Eso significa que cada objeto debe tener Sólo una tecla asignada y no un array completo.

Lo que yo haría, es asignar la tecla a cada objeto individual (en el Creation Code), porque él arrastrará ese valor al resto de las rooms:
Creation code (o creation event si son objetos hijos diferentes)
key = vk_up
Y en el room_start event le mapeo la posición a la tecla asignada, cada vez que inicies una nueva room, se hará el mapeo de nuevo:
virtual_key_add(x,y,sprite_width,sprite_height,key);
Entonces cada vez que pulses la ubicación de ese objeto, GM lo detecta como si pulsaras la tecla "vk_up".

Aunque repito, si tu código está ok y funciona bien, no muevas nada.

Saludos
126
Preguntas y respuestas / Re:dibujar movimiento
Octubre 14, 2018, 07:50:15 PM
Hola Sr.Mojon

Puedes simplemente dibujar un círculo negro.
draw_ellipse(x1,y1,x2,y2,false)

O algo más elaborado puede ser dibujar el mismo sprite pero aplastado.
draw_sprite_ext(sprite_index,image_index,x,y+sprite_height+cap,1,0.2,0,c_black,1)

Eso dibujará el sprite con una escala en Y del 20% de su tamaño original.

Puedes incluso reducir e incrementar la escala de la sombra a medida que el objeto suba o baje para causar un efecto de altura.

Saludos cordiales
127
Preguntas y respuestas / Re:dibujar movimiento
Octubre 14, 2018, 07:32:39 PM
Hola Sr.Mojon

Es por tu versión de Game Maker entonces, dsin está disponible desde GMS 1.4 en adelante.

Usa la función de GM8.

Saludos
128
Preguntas y respuestas / Re:dibujar movimiento
Octubre 14, 2018, 07:30:56 PM
Hola Sr.Mojon

Qué error sale?
129
Preguntas y respuestas / Re:dibujar movimiento
Octubre 14, 2018, 07:25:08 PM
Hola Sr.Mojon

Si quieres crear un efecto de oscilación, lo mejor es usar las funciones trigonométricas, sugiero la función seno.

Creation Event
angle = 0

Step Event
angle +=4 //Esta es la velocidad, puedes usar un número más alto para que vaya más rápido
if angle >=360 angle -= 360


Draw Event
var cap = 16 //La cantidad máxima de pixeles que baja y sube
var y_offset = cap*dsin(angle)
draw_sprite(tu_sprite,la_sub_imagen,la_x,y_offset+la_y)


Eso hará que el sprite se mueva hacia arriba y abajo en un movimiento oscilante (con rango -cap;+cap en pixeles, para este ejemplo -16, +16 pixeles)
Puedes dibujar una sombra fija a nivel del suelo para que de una mejor sensación de que el objeto está flotando.

En GM8 no existe la función dsin(), en reemplazo debes usar: sin(degtorad(angle))

Si no es eso lo que necesitas, ignora este mensaje xD

Saludos
130
Estimados

Probé asignando arrays y me ha funcionado, al menos mientras lo testeaba.
Asigné el mismo array vacío a todas las celdas de la grid y luego podía editar cada array de forma individual.

Más adelante voy a implementarlo en el juego real para ver si afecta o no al rendimiento del juego.

Si falla el rendimiento, lo haré con strings y listo...

Gracias por sus respuestas  ;)

Saludos
131
Hola PaulleXd

No sé qué hace tu creation code, pero tengo entendido que los objetos persistentes arrastran las variables declaradas a la siguiente room.
Si no te funciona, intenta usar un script en el evento "room_start" o crear el objeto de nuevo.

Saludos
132
Estimados

Mi duda está enfocada en la eficiencia, porque la verdad es que es algo que sí pude hacer...
Quiero almacenar varios valores (un número entre 0 a 4000) en una celda de una DS Grid (quizás 3 o 4 valores en la misma celda).
Ej: que la celda x,y contenga estos 3 valores al mismo tiempo: 300 1 3850

He probado algunas cosas, pero no me convencen mis métodos y quiero saber si alguien lo ha hecho alguna vez de forma eficiente.

Hasta ahora probé 3 cosas:

1- Crear 3 DS Grid diferentes, es el peor método porque es el menos eficiente y en el que más lento se trae la info.

2- Almacenar carácteres binarios, el problema es que sólo acepta un rango de 0 a 255 y quiero almacenar valores de 0 a 4000. Almacenando 2 binarios juntos (y después hacer un cálculo) me causaba errores y bugs raros, sobre todo cuando intentaba leer el cero.

3- Guardar los números como texto, separados por un delimitador. Hasta el momento es el mejor método que he encontrado, es el más eficiente y el que hace más rápido la lectura/escritura de la info para el juego.
El problema es que el código se ve horrible y muchas veces me confundo cuando quiero leer / escribir data en la grid.

Alguna idea?
133
Hola jpsaenz

Yo hace algunos años atrás cree un sistema de scripts RPG para Game Maker (simulando el juego Pokemon).

Como es un sistema complejo, no te puedo mandar el código por acá ya que todo funciona en conjunto, así que reduje su funcionamiento en un pequeño proyecto importable para GMS 1.4 que está adjunto y un ejecutable para que pruebes como funciona.

En RESUMEN:
El NPC no hace nada, sólo tiene guardado el ID del script a ejecutar en el creation code.
Al pulsar "espacio", el player buscará al NPC más cercano y si hay uno a rango, interactuará con él, TODO el código y variables se ejecutan en el objeto "obj_player", solamente lee el ID del script desde cada instancia NPC.
El proyecto tiene 3 scripts principales:
scr_load: se encarga de cargar una lista de comandos y los mete en una cola.
scr_run: luego que tomas un comando de la cola, este script ejecuta su efecto.
scr_question: es el script asociado a las preguntas, aquí colocas las preguntas, las respuestas y lo que quieres que pase al pulsar cada respuesta.

Es dificil de configurar... cualquier duda me la puedes comentar.

PD: es sólo una pequeña parte de lo que el código es capaz de hacer, ya que sólo reacciona a los comandos "TEXT" y "QUESTION", pero puedes poner miles y miles, como "INICIAR BATALLA", "MOVER AL PLAYER o NPC", "APARECER OBJETO", etc y puedes encolar las acciones, generar delay, cortar la ejecución de un script y saltarte a otro, o lo que tu imaginación de.

Saludos
134
Hola jpsaenz

Eso te pasa porque estás asignando el tiempo a la alarma en cada step.
Como cumple la condición, seteas la alarma a 3 segundos. En el próximo step sigues cumpliendo la condición y vuelves a setear la alarma a 3 segundos, entonces jamás llegará a cero.

Puedes incluir todo el código en el evento keyboard_check_pressed o añadir una condición que evite la reiterada ejecución del codigo

if (wpchat = 1) && image_index != 1 {
image_index=1;
alarm[0] = room_speed*3;
}

Saludos
135
Hola Neo Wick

El tamaño del juego se ajusta al tamaño de la primera room que se ejecuta en el juego (aunque las rooms siguientes tengan otro tamaño o display).

Si quieres cambiar el tamaño de la ventana fuera de la primera room, puedes intentar usar esta función:
window_set_size(ancho, alto)

Le asignas un "ancho" y "alto" (en pixeles) a la pantalla y debería modificar su tamaño.

Saludos