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

91
Preguntas y respuestas / Re:depth con draw a otro nivel
Noviembre 10, 2019, 01:48:51 AM
Hola KayasamiX!

Vi algo similar hecho por Friendly Cosmonaut en YouTube.
Este es el link: https://www.youtube.com/watch?v=8QCgN2RDA9I&list=PLSFMekK0JFgx0F31GzbW_Cg2GeM0ErwLP

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
92
Preguntas y respuestas / Re:Error al entrar en una room
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
93
Qué tal si después de escribir datos usas file_text_writeln? Eso genera un salto de línea.
Luego para cargar correctamente, después de cada lectura normal (string o real) deberás añadir un file_text_readln para leer los saltos de línea y que no interfieran en la data
94
Hola Marth

Tu puedes escribir código en esos eventos y luego corres tu código usando la función:
event_perform(ev_other, ev_user0)

Cambiando el "0" por el número del evento que quieras activar.

Saludos
95
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:
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() }
}
96
Preguntas y respuestas / Re:Archivos ini
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
97
Hola StephanRocket

Te recomiendo usar una variable local para detectarlo, la variable local existe sólo en el bloque de código o script que se está ejecutando en ese momento, pero es "global" a todas las instancias del juego, mientras se ejecuta ese bloque, todos los objetos pueden leer y modificar el valor de esa variable.

var check = true //crea la variable local check
if !instance_exists(object_name) { check = false } //si no existe el objeto, no ejecutará nada
else with (object_name) { //hace un loop en todos los objetos
//Si al menos uno de tus objetos no cumple la condición, la variable "check" se vuelve falsa
if (variable = false) { check = false; break }
}

If check = true { //Si check es true es porque revisó la misma variable en todos los objetos y en todos se cumplía la condición
Aquí pones el código que quieres que se ejecute
}


Saludos
98
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
99
Hola clsotelo

Si ya tienes la función, cuál es el problema?
100
Preguntas y respuestas / Re:cancelar colision ?
Febrero 19, 2019, 12:45:46 PM
Hola florgm

Tu problema puede ocurrir porque el objeto de colisión es sólido y tu obj_circulo tiene el evento "colisión". Si esas dos condiciones se dan, game maker gestiona por sí solo la colisión sin importar que condición le escribas.
Te recomiendo eliminar el evento colisión del obj_circulo y escribir la colisión en el step event tal como lo escribió Black_Cat.
if !place_free(x+hspeed,y+vspeed) && sprite_index != spr_verde {
Tu código para colisionar
Ej: hspeed = 0; vspeed = 0
}


Saludos
101
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
102
Preguntas y respuestas / Re:Granja
Febrero 14, 2019, 08:19:41 PM
Hola Marcusmaniacus.

Cada objeto de Game Maker que colocas en una room (ya sea de forma manual en el editor de rooms o mediante el instance create) tiene un ID único que identifica a ese objeto, se puede conocer si llamas a la variable "id".

Tu solución depende de cómo gestionas el clic del mouse, una forma sencilla es la siguiente:

En un objeto control, (supongamos que se llama oControl) creas la queue para que sea única:
queue = ds_queue_create() //Esto crea una cola y guarda la cola en la variable "queue" alojada en el objeto control
En ese mismo objeto, pero en el game_end, la destruyes para evitar que quede en cache.
ds_queue_destroy(queue)

Ahora la magia, cuando clickeas un objeto arbusto, mediante el evento del mouse button del arbusto, le añades su id a la queue.
ds_queue_enqueue(oControl.queue,id) //Aquí haces referencia a la queue alojada en el objeto oControl

Ahora hay que hacer que el player camine hacia el arbusto.
En el create event del player, le pones una variable que indica el objeto hacia el que está caminando:
target = noone //noone significa que no sigue a ningún objeto

Ahora la magia más mágica, cuando hay algún arbusto en la cola, haces que el player lo detecte en su Step event y camine hacia al arbusto que hayas clickeado. Puedes añadir la condición que desees, estas son las dos condiciones clave:
if !ds_queue_empty(oControl.queue) && target = noone  {
target = ds_queue_dequeue(oControl.queue) //Esto lee el arbusto que sigue en la cola
}
//El seguimiento puede ser cualquier código, aquí va el más sencillo que se me ocurrió:
if target != noone {
var spd = 8 //La velocidad que quieras
if point_distance(x,y,target.x,target.y) < spd { //Si llegaste al arbusto, ajusta tu posición a la posición del arbusto
x = target.x
y = target.y
target = noone
}
else { //Si aún no has llegado, te acerca un paso más
var dir = point_direction(x,y,target.x,target.y)
x += lengthdir_x(spd,dir)
y += lengthdir_y(spd,dir)
}

}


Con eso debería bastar, no he probado el código así que es posible que me haya equivocado en algún paso o el nombre de alguna variable

Saludos Cordiales
103
Preguntas y respuestas / Re:Granja
Febrero 14, 2019, 07:17:11 PM
Hola Marcusmaniacus

Intenta añadir los id a una ds_queue, así puedes encolar acciones, luego vas leyendo el id que sigue para ir al arbusto que sigue.
Para crear una queue usa:
queue = ds_queue_create()
Para meter info:
ds_queue_enqueue(queue,id_del_arbusto)
Para leer info:
prox_arbusto = ds_queue_dequeue(queue)

Saludos
104
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
105
Hola kostra

Se me ocurre que guardes en el objeto bola, el ID del boost que está activando actualmente.
Create Event:
boost = noone //El ID del boost que estoy activando

En el objeto boost, en su evento de colisión con la bola
if other.boost = noone || other.boost = id {
if other.speed < 30
    { other.vspeed -= 0.5; other.boost = id }
else
    { other.speed = 30; other.boost = id }
}

Eso hará que la bola guarde el ID del boost que toca y ya no podrá activar ningún otro, sólo ese. Si toca dos al mismo tiempo, sólo activará el boost que se creó primero en la room (según el orden de creación de instances en las propiedades de la room).
Ahora, para desactivar la condición, tienes que hacer que al dejar de tocar el boost que lo está impulsando, se resetee la variable para que pueda activar otro boost.

En el Step de la bola:
if boost != noone {
if !place_meeting(x,y,boost) { boost = noone } //aquí revisa si ya no está colisionando con el ID guardado en la variable "boost" y reiniciará la variable
}


A la variable le puse de nombre "boost" pero tu le puedes poner el que quieras.

Saludos