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

106
Hola kostra

Usa una variable global para controlar la animación, así en el draw sprite todos dibujarán el mismo frame
107
Hola Zeran_Maran

Se te pega porque la condición que le diste al while nunca se deja de cumplir, de ser así se te va a pegar en cualquier evento, room_start, create, etc. No tiene nada que ver el STEP
108
Hola Marth

No existe tal cosa, lamentablemente por la manera en que Game Maker gestiona las rooms, no hay muchas formas de interactuar con otras rooms.

Lo que te recomiendo es que manualmente cuentes los objetos que has puesto en las rooms y guardes el número en una variable (ya sea de un objeto persistente o una variable global) y cada vez que ese objeto se destruye, que su destroy event te reduzca en 1 el valor de la variable, así podrás saber exactamente cuántas te quedan.

Si quieres algo más automático, existe la función "instance_number(object_index)" para conocer la cantidad de instancias que existen en la room actual de un objeto dado.
Si quieres conocer también la cantidad en otras rooms, tendrás que hacer un loop entre todas las rooms y revisar en cada una la cantidad de objetos, lo que generará un lag tremento (según la cantidad de rooms) y activará todos los create_event de todos los objetos (según la cantidad de objetos).

Saludos
109
Preguntas y respuestas / Re:Ejecutar UNA sola vez
Noviembre 13, 2018, 12:28:06 PM
En ese caso revisa que estés tocando el suelo antes de cambiar la vspeed con la función:
if place_meeting(x, y+1, obj_suelo)
Reemplaza "obj_suelo" por el objeto que uses de muro.

Saludos
110
Preguntas y respuestas / Re:Ejecutar UNA sola vez
Noviembre 12, 2018, 12:11:30 PM
Hola Binario YT

Asumo que ese código está en step, en ese caso, usa la función "keyboard_check_pressed" en vez de "keyboard_check", así sólo detectas la primera pulsación de la tecla
Ej:
if keyboard_check_pressed(vk_space)
&& place_meeting(x,y+1,obj_suelo) {
Ejecuta el salto acá
}


Saludos
111
Preguntas y respuestas / Re:Problema con la vspeed
Noviembre 11, 2018, 02:20:34 AM
Hola PaulleXd

El problema es que los objetos "hijos" (por así decirlo) están copiando la velocidad de dos objetos diferentes, cuidado con los nombres.
"RI3_2" y "RIC3_2", usa uno único, ejemplo "RIC3_2".
Lo otro que puede causar el error, es que tengas más de un "RIC3_2" en la room, entonces le cambias la velocidad a uno, pero los "hijos" están copiando la velocidad de otro con una velocidad diferente.

Como solución se me ocurre que:
En Step pongas:
RI1_2.vspeed = RIC3_2.vspeed
RI2_2.vspeed = RIC3_2.vspeed
RC2.vspeed = RIC3_2.vspeed


Y en la colisión cambiar la vspeed de TODOS los RIC3_2 (por si hay más de 1 en la room):
with (RIC3_2) { vspeed = 0; }

Entonces en el próximo step, todos los objetos indicados en el step, copiarán la velocidad cero.

Tu solución de hacer un Objeto Padre también sirve.
Puedes crear un objeto nuevo llamado "control_velocidad" (o como sea) y que sea padre de todos los demás, así usas "control_velocidad.vspeed = 0" y todos los hijos tomarán velocidad cero.
Según yo, el código del hijo sobre-escribe el del padre, así que no debería afectar en el draw event.
Simplemente anda a cada objeto que quieres que sea "hijo" y en la casilla "Parent", le pones "control_velocidad" (o como le hayas puesto al objeto)

Saludos
112
Hola lucasflexx

La función "collision_line" permite trazar una línea recta entre dos puntos y ver si algún objeto toca la línea que hemos trazado.
Es útil para cuando quieres usar un láser por ejemplo, así detectas la colisión desde el principio hasta el final del láser sin tener que hacer cosas raras con las mascaras de colisión.

Su uso es:
collision_line( x1, y1, x2, y2, obj, prec, notme );

x1: Coordenada X del punto 1
y1: Coordenada Y del punto 1
x2: Coordenada X del punto 2
y2: Coordenada Y del punto 2
obj: El object_index o instance_id del objeto que quieres ver si toca la línea.
prec: true utiliza el método "pixel perfect collision", pero el sprite tiene que tener activa la casilla "precise collision checking" para que funcione, lo normal es usar "false" para que se tome en consideración la boundary box de la máscara de colisión.
notme: Sólo es relevante si el objeto que corre el código coincide con el indicado en el parámetro "obj", entonces al usar "true", se excluye el objeto que corre el código, al usar "false" se considera para la colisión.

La función, en respuesta, en vez de traer "true" o "false", te devuelve el instance_id del objeto con el que colisiona.
Si ningún objeto colisiona con la línea, la función devuelve "noone".
Si 2 o más objetos colisionan con la línea, la función trae sólo 1 instance_id.
113
Preguntas y respuestas / Re:¿Me ayudáis con esto?
Octubre 28, 2018, 02:27:58 AM
Hola Pejota

En este caso Game Maker permite encadenar los "if" y "else" en una estructura infinita.
La estructura es la siguiente:
if (caso1) { código 1 }
else if (caso2) { código 2 }
else if (caso3) { código 3 }
else { el código cuando no ocurre ninguno de los 3 casos anteriores }

Para lo que necesitas, simplementa añade una cuarta condición indicando simplemente "else" y debería ejecutarse ese código para cuando no se cumple ninguno de los 3 casos anteriores.

Saludos
114
Preguntas y respuestas / Re:¿Me ayudáis con esto?
Octubre 27, 2018, 11:57:15 PM
Buenas Pejota

No sé para qué tantos brackets innecesarios, puedes simplificarlo todo si usas el "and" o "&&" que sirve para enlazar condiciones.
"if (condicion1 = true) and (condicion2 = true) { hace algo }"

Acá he simplificado tu código, que a apreciación mía estaba correcto:

with (RealTortero2) {

if (sprite_index = FSB) && (image_index = 8) {
action_sprite_set(BH0, 0, 1);
}
else if (sprite_index = SDBS) && (image_index = 12) {
action_sprite_set(BH, 0, 1);
}
else if (sprite_index = SBS) && (image_index = 12) {
action_sprite_set(BH, 0, 1);
}

}


Hay algunos casos donde el image_index funciona raro, te recomiendo hacer image_index = 0 cada vez que cambias de sprite para asegurarte que se cumpla la condición.

Saludos
115
Entonces te sirve el primer método.

En el Create Event del objeto controller pone una variable cualquier.
fire = noone

Cuando la Bola crea las partículas o cuando se destruye el objeto, le pasas la variable que guarda el ID del sistema de partículas al controller.
controller.fire = fire

Ahora desde el objeto controller ya tienes una variable llamada "fire" que guarda el ID del sistema de partículas que quieres destruir, sólo asegúrate que la variable no tenga valor "noone" y ya.

Saludos
116
Hola eams1986

Por lo que noto de tu código, quieres destruir el objeto que genera las partículas pero quieres que las partículas se sigan viendo.

Se me ocurren 2 soluciones:

1- Que el objeto "bola" le pase la variable "fire" a un objeto controlador, luego desde ese objeto controlador eliminas el sistema.
En el Destroy Event del objeto "bola":
controller.fire = fire //El objeto "controller" crea una variable "fire" con el valor de la variable "fire" en el objeto que llama el código

2- Que crees un objeto auxiliar que haga de cadaver, sin sprite y que sólo sirva para almacenar la variable "fire", para que elimine el efecto después.
En el Destroy Event del objeto "bola":
with (instance_create(x,y,cadaver)) {
fire = other.fire //La variable "fire" del objeto "cadaver" almacena el valor de la variable "fire" que tenía el objeto que la crea.
}


Así evitas tener que crear la variable como global

El primer método funciona si el objeto bola es único, sino una segunda bola sobre-escribe la variable de la primera bola y ya no podrás eliminar las partículas.

El segundo método funciona en caso que tengas más de una bola, ahí cada bola tendrá su propio cadaver que guardará su propia variable, en caso contrario, si usas solo una bola, no tiene sentido crear un objeto adicional solo para almacenar una variable.

Saludos
117
Preguntas y respuestas / Re:Texto con subincides
Octubre 23, 2018, 02:22:54 AM
Hola Johann

Nunca antes me lo había cuestionado, acá al parecer hay un sujeto que parece haber encontrado solución a tu problema.

https://stackoverflow.com/questions/37097331/how-to-write-subscript-text-in-game-maker

él crea dos fuentes, una pequeña y una grande y separa los draw events en script que ajustan la posición "x" del texto según el ancho del texto anterior, puede funcionar, aunque creo que se debe ajustar la posición "Y" del texto pequeño según si quieres dibujar un sub-índice o un super-índice.

Saludos
118
Preguntas y respuestas / Re:Problema con draw_healthbar
Octubre 22, 2018, 01:10:44 PM
Hola knd144

La función draw_healthbar tiene que tener un ancho fijo y el valor debe ir entre 0 a 100 (siendo 100 la barra completa).
Si le pones 30 se verá sólo un tercio de la barra.
valor = tu_valor * 100 / 30
Esa pequeña ecuación convierte tu valor de rango 0 a 30, a un rango de 0 a 100 para que puedas usarlo en la función

Saludos
119
En ese caso es mejor controlar la animación con una variable a parte.

Create Event
anim = 0

Step Event
if global.vida=0 && anim < 6 {
anim += 1
}


Draw Event
if global.vida=0 {
draw_sprite(spr_KO,anim,960,540);
}


Saludos
120
Hola Pejota

Si estás dibujando el sprite con "sprite_index", tienes que detener la variable que usas para dibujar la subimagen.
Si dibujas la subimagen con valor "-1" o "image_index", basta con hacer image_speed=0 y detienes la animación.

Saludos