Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - BssString

Páginas: 1 2 3 ... 8
1
Preguntas y respuestas / Re:Sistema de scripts de XSE
« en: Enero 16, 2020, 10:58:44 pm »
Hola FernandoNavarro

Interesante, yo lo hice con un ini, en el parámetro "section" puse el número de script y luego en el parámetro "key" le puse un número en orden correlativo.

Ejemplo:
[1]
1="lock"
2="faceplayer"
3="release"

Entonces corrí in while loop mesclado con la función "ini_key_exists" para saber si aún me faltaban líneas por leer y ya las iba leyendo.

Leí los comandos como "string", pero lurgo los ejecuté como scripts que tenía creados en el árbol de recursos de Game Maker.

Cree scripts con la programación dentro llamados así:
ev_lock
ev_faceplayer
ev_release

Y los llamé buscando el asset index primero y luego usando un script_execute.
Un ejemplo rápido:
var evento = ini_read_string("1","1","")
script_execute(asset_get_index("ev_"+evento))

Para los argumentos fue más complejo porque usé un script tokenizer para convertir cada palabra adicional en un argumento adicional para mi script.

Quizás te sirvan algunos aspectos de mi idea

Saludos
Los siguientes usuarios dieron las gracias a este tema: FernandoNavarro

2
Preguntas y respuestas / Re:Hola me podrian ayudar
« en: Enero 14, 2020, 03:29:30 am »
Hola XxBL100xX

Nunca he jugado Megaman, pero por lo que entedí de lo que escribiste, quieres que al soltar rápido el botón haga un disparo simple y al manterner pulsado y luego solar, entonces haga un disparo fuerte.

Para eso mi sugerencia es que uses una variable para medir durante cuánto tiempo has pulsado el botón, y que al soltar el botón, en base al tiempo, haga un disparo u otro.

Una forma sencilla de lograr esto sería hacer lo siguiente:
En el Create Event declaras la variable
Código: [Seleccionar]
carga = 0
En el Step Event, cargas y luego disparas.
Código: [Seleccionar]
if keyboard_check(vk_space) { carga = min(room_speed,carga+1) } //Esto cargará el disparo mientras mantienes pulsado la tecla espacio (hasta un máximo de 1 segundo)
if keyboard_check_released(vk_space) { //Esto ocurre al soltar el botón
if carga = room_speed { creas el disparo poderoso } //Si cargaste al máximo, hace el disparo poderoso
else { creas el disparo normal } //Si no cargaste el máximo, entonces hace un disparo normal.
carga = 0 //Resetea la variable carga para que empiece a cargar desde 0 para cuando quieras disparar otra vez.
}

Eso es en términos generales, ahí tu adapta el código a como mejor te parezca y como mejor se adapte a tu proyecto.
Lo que hace el código de arriba es que al mantener pulsado espacio, por cada STEP que pasa te sube la variable carga en 1.
Usé la variable "room_speed" que mide la cantidad de STEPS que hay en 1 segundo, por defecto es 30.
Eso quiere decir que si mantienes pulsado espacio por 30 STEPS (1 segundo) hace el disparo fuerte.
Si lo sueltas antes, hace el disparo normal.
Al hacer el disparo debes resetear la variable carga a cero de nuevo para que al volver a disparar, te vuelva a contar el tiempo desde cero.

Puedes complementar el Script anterior con un draw event para dibujar una barra de carga o modificar la pose del jugador o el color de la pistola, así el jugador recibe información visual de si ya se cargó lo suficiente para hacer el disparo poderoso o el disparo simple.

Si quieres más o menos tiempo, modifica el valor de "room_speed" por el número que quieras para modificar el tiempo de carga.

Saludos
Los siguientes usuarios dieron las gracias a este tema: XxBL100xX

3
Preguntas y respuestas / Re:if - else?
« en: Enero 02, 2020, 11:56:37 pm »
Hola Ikaro3d

Según como lo veo yo, el código no funciona bien, no sé que habrá hecho el instructor, de hecho no tiene mucho sentido para mi que se escriba un "else" después de cada keyboard_check.

Para mi lo que tiene sentido es que se haga algo así:
Código: [Seleccionar]
if keyboard_check(izquierda) {
//Moverse a la izquierda
}
else if keyboard_check(derecha) {
//Moverse a la derecha
}
else {
//No moverse
}

PD: la palabra izquierda y derecha dentro del Keyboard Check es referencial, ahí pones la tecla que quieras comprobar

Saludos
Los siguientes usuarios dieron las gracias a este tema: Ikaro3d

4
Preguntas y respuestas / Re:Verificar si se esta en una room
« en: Diciembre 29, 2019, 03:24:55 pm »
hola jhgv

puedes usar la variable "room".
Ejemplo:
Código: [Seleccionar]
if (room = room_intro) { room_goto(etapa1) }
Los siguientes usuarios dieron las gracias a este tema: jhgv

5
Preguntas y respuestas / Re:color para las fuentes
« en: Diciembre 23, 2019, 12:36:34 am »
Hola JheyRost

Puedes editar el color en el que se dibuja el texto usando la función "draw_set_color" para cambiar el color de todos los dibujos que ocurran después, incluyendo las formas con draw_line / draw_rectangle, etc.

ejemplo, si quieres el texto color rojo usa:
Código: [Seleccionar]
draw_set_color(c_red)
draw_text(0,0,"tu texto aquí")
draw_set_color(c_black)

Lo que hace ese código es asignar color rojo para los futuros dibujos, luego dibuja tu texto y luego revierte el color de dibujo a negro de nuevo para no cambiar el color de futuros dibujos o textos.

Si no te gustan los colores que vienen por defecto, puedes crear los tuyos usando:
make_colour_hsv o make_colour_rgb

Ejemplo:
draw_set_color(make_colour_rgb(10,240,20))
Eso dibujará todos los draws con un color con 10 de rojo, 240 de verde y 20 de azul.

Puedes leerte el manual de GM para entender como usar esas funciones y qué argumentos necesitas escribir.

Saludos
Los siguientes usuarios dieron las gracias a este tema: JheyRost

6
Preguntas y respuestas / Re:movimiento tipo pokemon
« en: Diciembre 13, 2019, 03:12:06 am »
Hola AgeX_005

Puedes lograr un movimiento en grid de 2 formas.

1- Con Alarma (pienso que es el más fácil). Va a depender del tamaño de tu grid.
Imaginemos que tu grid mide 16 pixeles. Cada vez que das un paso, tienes que cuadrar la velocidad con el tiempo, o sea que setea una velocidad de 2 pixeles y le das una alarma de 8 steps.
Entonces cuando la alarma termine te habrás movido 2*8 = 16 pixeles.
Código: [Seleccionar]
if alarm[0] = -1 {
if keyboard_check_pressed(la tecla de dirección aquí) { hspeed (o vspeed según corresponda) = 2 (o -2); alarm[0] = 8 }
else if keyboard_check_pressed(otra dirección) { lo mismo }
repite lo mismo para las otras direcciones.
}

En la alarma setea la speed a cero y listo.
Código: [Seleccionar]
speed = 0
2- Puedes conseguir este efecto si usas unas coordenadas de destino y una velocidad.
Para que funcione debes tener creada una variable que guarde la coordenada X e Y de hacia donde te quieres mover.
Creation code:
Código: [Seleccionar]
x_destino = x
y_destino = y
velocidad = 2

En el step event te mueves asignando una futura ubicación.
Código: [Seleccionar]
if x_destino = x && y_destino = y {
if keyboard_check_pressed(la tecla de dirección aquí) { x_destino = x-16 //+16 para derecha, -16 para ir a la izquierda (o y_destino = y-16 o y+16); }
else if keyboard_check_pressed(otra dirección) {}
repite lo mismo para las otras direcciones.
}

Luego, en el STEP al final de ese mismo bloque de código (o en END STEP si prefieres)
Haces al personaje caminar
Código: [Seleccionar]
if x_destino != x { if abs(x_destino-x) = velocidad { x = x_destino }; else { x += sign(x_destino - x)*velocidad } }
y_destino != y { if abs(y_destino-y) = velocidad { y = y_destino }; else { y += sign(y_destino - y)*velocidad } }

Puedes elegir cualquiera de los 2 métodos, pero NO ambos al mismo tiempo.

Saludos
Los siguientes usuarios dieron las gracias a este tema: AgeX_005

7
Hola renrojo

La diferencia es que el ciclo "for" ocurre de principio a fin en el mismo Step, por eso ves la string dibujada completa, porque el "for" llega hasta el final del string en 1 Step.

La forma de usar una variable e incrementarla va a ser igual o diferente dependiendo de cómo incrementas la variable, si la incrementas en el Step Event o en el Draw Event 1 vez por Step, entonces ahí sí lograrás el efecto que buscas y verás que la string se va dibujando letra por letra. Porque cada 2 steps te dibujará la letra que sigue en vez de TODO en el mismo step.

De hecho lo que pienso que te pasó en el ciclo "for" es que si tu string mide 10 carácteres, el ciclo for te hace 10 dibujos al mismo tiempo.
Primero dibuja una letra, luego la primera y la segunda, luego la 1ra, 2da y 3ra, etc hasta dibujarlas todas, entonces las primeras letras se dibujan varias veces en el mismo step, por eso las ves en Negrita.

Saludos
Los siguientes usuarios dieron las gracias a este tema: renrojo

8
Preguntas y respuestas / Re:¿Como pedir números al jugador?
« en: Noviembre 27, 2019, 01:55:06 am »
Hola Zhekken

Si el resultado de tu contraseña es exacto, entonces comparalas como texto y ya.
Ej:
Código: [Seleccionar]
if (respuesta = "1234") { abrir puerta }Si usas las comillas estarás comparando textos en vez de números.

Existe la función "string_digits" que toma sólo los números de una string.
Ej: string_digits("100tifico") te da como resultado "100" (como texto)

También existe la función "real" para convertir una string a número siempre y cuando tenga formato de número.
ej: real("-12.5") te regresa -12.5 como número
Pero real("a123sdb5") falla.

Te sugiero combinar ambas. string_digits para dejar sólo los números y luego real para convertirlos a número.

Saludos
Los siguientes usuarios dieron las gracias a este tema: Zhekken

9
Preguntas y respuestas / Re:depth con draw a otro nivel
« en: Noviembre 10, 2019, 01:48:51 am »
Hola KayasamiX!

Vi algo similar hecho por Friendly Cosmonaut en YouTube.
Este es el link:

Lo que ella hace es crear una ds_grid de ancho 2 y alto n que almacena el objeto que ella quiere dibujar y la "y" (o depth) en que quiere dibujar ese objeto. Luego ordena la grid según la depth y desde un objeto maestro dibuja los otros objetos 1 a 1.

En tu caso (como no usas objetos) deberás crear una ds_grid de ancho 5, para que almacene: sprite, sub-imagen, X, Y, depth por cada sprite que quieras dibujar. Después ordenas la ds_grid según la "depth" y en el draw event de un objeto maestro dibujas cada sprite en orden.

Saludos
Los siguientes usuarios dieron las gracias a este tema: KayasamiX

10
Preguntas y respuestas / Re:Error al entrar en una room
« en: Octubre 05, 2019, 03:58:11 pm »
Hola alvarito8788

Lo que veo es que el "obj_controller" intenta interactuar con el objeto "obj_pic" y el objeto "obj_pic" no existe en la room.

Saludos Cordiales
Los siguientes usuarios dieron las gracias a este tema: alvarito8788

11
Hola Fashion_Trozos

El problema es que se ejecutan ambos bloques de código al mismo tiempo, entonces creas y destruyes el inventario en el mismo step.
Te sugiero cambiar la estructura por un "if-else", de esta forma:
Código: [Seleccionar]
if keyboard_check_pressed(ord("I")) {
if instance_exists(ob_inventario) = false { instance_create_depth(room_width/2,room_height/2,-1,obj_inventario) }
else { with (obj_inventario) instance_destroy() }
}
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

12
Preguntas y respuestas / Re:Archivos ini
« en: Marzo 28, 2019, 11:44:42 pm »
Hola Star Platinum

Claro que el valor debe cambiar.
Después de usar algún ini_write, Game Maker modifica el archivo original según los parámetros que le has indicado.

Revisa que estás viendo el archivo en la ruta correcta.

Saludos
Los siguientes usuarios dieron las gracias a este tema: Star Platinum

13
Preguntas y respuestas / Re:Sacar el angulo entre dos puntos.
« en: Febrero 22, 2019, 03:01:54 pm »
Hola clsotelo

La función point_direction que estás usando te devuelve el angulo en "grados" entre dos puntos, en este caso estás usando como primer punto el "X" e "Y" del objeto que llama el código y como segundo punto el device_mouse_x(0) y device_mouse_y(0), que en android es la coordenada del primer dedo que entra en contacto con la pantalla..
El valor que te retorna es un ángulo en grados con un valor entre 0 y 359 (con decimales incluso).
Siendo: 0° = Derecha / 90° = Arriba / 180° = Izquierda / 270° = Abajo.

Saludos
Los siguientes usuarios dieron las gracias a este tema: clsotelo

14
Preguntas y respuestas / Re:Posición de Object sobre una View
« en: Febrero 19, 2019, 12:17:58 pm »
Hola clsotelo

Simplemente sustrae la coordenada de la cámara a la coordenada del objeto y así obtienes la posición del objeto relativa a la cámara

x objeto - x cámara = x relativo

Saludos
Los siguientes usuarios dieron las gracias a este tema: clsotelo

15
Hola Ikaro3d

Tal como dice Clamud, el efecto parallax te puede ayudar, donde los objetos más lejanos se mueven más lentos que los objetos más cercanos.

También podrías desenfocar el objeto para que dé la sensación de que está lejos o hacer que se vea más pálido que el resto de los objetos.
Por lo general en las fotografías de montañas, las más lejanas se ven más pálidas que las más cercanas, aunque se debe a la atmósfera, no sé si en el espacio aplique el mismo concepto xD

Saludos
Los siguientes usuarios dieron las gracias a este tema: Ikaro3d

Páginas: 1 2 3 ... 8