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

196
Preguntas y respuestas / Re:No funciona cordenada X ni Y
Septiembre 06, 2018, 02:09:56 AM
Que bueno que hayas encontrado la solución.

PD: Excelentes dibujos man.
197
Preguntas y respuestas / Re:No funciona cordenada X ni Y
Septiembre 05, 2018, 06:54:16 PM
Hola Ikaro3d
Duda: la velocidad de 10 es vertical? O diagonal? Porque si te mueves 10 pixeles en diagonal, en "y" no avanzas los 10 pixeles... avanza menos
Sino es eso, lo único que se me ocurre es que en la room estás creando la instance en una "y" que no es multiplo de 10.
Creo que las rooms de game maker por defecto se dividen en múltiplos de 32, si creas la instance en una coordenada rara, tu "y" jamás será 200.

Lo reitero, para salir de cualquier duda, lo mejor que puedes hacer es dibujar como texto en el evento de dibujo para que te muestre la "y" del objeto en pantalla, así sabes en todo momento cual es el valor que toma la variable "y" mientras vas caminando
198
Preguntas y respuestas / Re:Cajas de Texto y View GM7
Septiembre 05, 2018, 01:52:51 PM
Hola HKaichim.
No sé si son las mismas funciones porque no uso GM7.
Pero de todas formas prueba con esto:
var x_centro = view_xview[0]+view_wview[0]/2;
var y_centro = view_yview[0]+view_hview[0]/2;


Saludos
199
Hola empardopo
Creo que buscas la función image_xscale.
Por defecto es 1, si le pones 2, el sprite se verá el doble de grande, si usas -1 el sprite se invierte horizontalmente.
Ojo que depende del origen del sprite

Saludos
200
Preguntas y respuestas / Re:Draw Gui y su posicionamiento
Septiembre 05, 2018, 01:45:35 PM
Hola Jalealf

En ese caso, la función draw_sprite_stretched ignora el origen del sprite y te lo dibuja en la coordenada superior izquierda.
A la coordenada del centro que quieres, réstale el (width/2) y el (height/2) del sprite stretched. De esa forma ajustas la esquina superior izquierda y el sprite queda centrado.

Ojo que game maker modifica el tamaño de la GUI para ajustarlo a la pantalla.
Puedes usar display_set_gui_maximise(1,1) para ignorar el escalado de la Gui

Saludos
201
Preguntas y respuestas / Re:obtener objeto dado un id
Septiembre 05, 2018, 03:22:49 AM
Hola FridaFlowers

Usa: id.object_index

Reemplazando "id" por el id de la instance.

Saludos
202
Preguntas y respuestas / Re:No funciona cordenada X ni Y
Septiembre 04, 2018, 10:13:28 PM
Hola Ikaro3d

Podrías mostrarnos el código para ver lo que intentas hacer?? Quizás tienes algo mal escrito.

Las coordenadas X e Y son relativas al objeto que está corriendo el código, si estás corriendo el código en otro objeto, no funcionará.
Si quieres tomar las coordenadas X e Y de un player, debes correr el código en ese objeto player.
Si por el contrario, estás corriendo el código en un objeto control y quieres tomar las coordenadas de otro objeto, tienes que usar: <object name>.x (sin los signos)
Ejemplo: Si mi objeto se llama "obj_player", yo uso obj_player.x para tomar su coordenada X.

Si tienes dudas, puedes editar el DRAW EVENT de tu objeto y hacer que te dibuje sus coordenadas.
draw_text(0,0,x)
draw_text(0,16,y)


Saludos

Saludos
203
Hola Jalealf

Que bueno que te haya servido el código.
El tema es que todo el código iba en el obj_draw xD
La idea es que el obj_sort no esté dentro del juego porque es un objeto padre, todo lo que hagas ahí lo harán los hijos también.

El error ocurre porque intenta borrar la ds_grid llamada "grid" y no está definida en el evento de creación.
Creala como noone.
grid = noone
204
Preguntas y respuestas / Re:rotar_spr drag-and-drop
Septiembre 01, 2018, 07:10:48 PM
Hola Ikaro3d

Deberías pensar en cambiarte al código GM, es más versátil que el Drag & Drop.

Tengo el GM en inglés, así que no sé como se llamarán las funciones, pero esto es lo que tienes que hacer:
Tienes que calcular el ángulo mínimo que hay entre tu ángulo actual y tu ángulo objetivo (que es la inclinación que quieres lograr)
Si vas a la derecha, tu angulo objetivo es 0º
Si vas hacia arriba, tu angulo objetivo es 90º
Si vas a la izquierda, tu angulo objetivo es 180º
Si vas hacia abajo, tu angulo objetivo es 270º

Calculas cuanto te falta y cambias gradualmente la inclinación. Te daré el ejemplo para la tecla izquierda y tu haces las otras 3.

En el Evento pulsar tecla izquierda.
Asigna una variable (puede ser de las normales o una local)
nombre = dif
valor = angle_difference(180,image_angle)
relativo = desmarcado


Eso crea la variable "dif" donde guardas cuanto debes girar la nave para llegar al ángulo objetivo.

Ahora vuelves a asignar una variable.
nombre = image_angle
valor = sign(dif)*(15)
relativa = Marcada


Eso cambia gradualmente la inclinación de tu nave según el signo de la diferencia. -15 grados si la diferencia era negativa, +15 grados si la diferencia era positiva o 0 si ya tienes la inclinación correcta

Para las otras direcciones, cambia el 180 de la primera asignación por el ángulo correspondiente.

Saludos
205
Preguntas y respuestas / Re:personaje que pinte al moverse
Septiembre 01, 2018, 02:45:39 AM
Hola peludo

Algo parecido a lo que muestra 3dgeminis es lo que había entendido, pero la mecánica de ese juego está bien trabajada y bien pulida, el ejemplo que yo te muestro es lo básico, tu lo debes adaptar a lo que necesitas.

Para conseguir un efecto similar, no es mucho de mi código lo que debes cambiar, el código del mouse ya lo hace casi todo.

En vez de dibujar con el mouse sobre la surface de tinta, crea un objeto de tinta que salga del player cada vez que haces algún movimiento o incluso cuando el player colisiona contra algún muro.
Ese objeto de tinta que tu creas, al colisionar con algún bloque se debe destruir y se debe dibujar a si mismo sobre la surface tinta, incluso hace que el objeto ese viva 2 o 4 steps más después que colisiona antes de destruirse para que pinte sobre el bloque que colisionó y parezca un efecto como de rastro de tinta.

Saludos
206
Hola Mordha

Entendí poco lo que explicaste, pero intentaré ayudarte de todas formas.
Creo entender que tu pato se mueve izquierda o derecha y tienes problemas en hacer que vaya al lado opuesto cada vez que colisiona.

En el evento Colisión con el otro objeto:
speed = 0 //hace que el personaje se quede quieto
x = xprevious //hace que el personaje retroceda a su coordenada anterior (vuelve al momento cuando no hacía colisión)
y = yprevious //Así evitamos que atraviese objetos no_solidos, eso detectaría colisión en cada STEP y nunca se va a activar la alarma
alarm[0] = room_speed //Establece 1 segundo de delay para elegir nueva dirección


En el evento Alarm 0:
speed = 8 //Reactiva el movimiento del personaje (ponle la variable o valor que corresponda)
if abs(angle_difference(direction,0)) <= 30 { //detecta que el personaje esté mirando a la derecha (con 30 grados de holgura)
direction = choose(150,180,210) //Elige una de las direcciones hacia la izquierda
}
else { //si tu personaje estaba mirando a la izquierda
direction = choose(30,0,330) //Elige una de las direcciones hacia la derecha
}


EDIT: Detecté un error, añadí la función "abs" al "angle_difference" ya que esta función puede dar +30 o -30 como resultado. Con la función "abs" se obtiene su valor absoluto, ignorando el signo, así puedes hacer la comparación perfectamente y no dará problemas con ciertos ángulos (ej: si la diferencia de ángulos da -180º, cumpliría erróneamente la condición <= 30).
|-30| <= 30
|+30| <= 30

Saludos
207
Hola Jalealf

No sé si aún tienes el mismo problema.
Te explico la técnica que ha usado la chica del video, con una variación.

Primero asegúrate de cumplir estas cuatro condiciones

1- Crea un objeto maestro que controle el dibujo, puedes llamarlo "obj_draw", o como quieras porque no usaremos su nombre. Sólo debes asegurarte de que vaya dentro de la room donde quieras hacer el sorting.

2- En el video se utiliza un script para llenar la grid, pero yo te recomiendo crear un objeto genérico de sorting que sea el padre de todos los objetos que quieras dibujar con profundidad. Yo he llamado a este objeto "obj_sort". Si quieres dibujar el player, o un arbol, o un NPC con profundidad, sólo debes asignarle como padre el "obj_sort". Este objeto sort no debe ir en la room y tampoco debe tener códigos encima, su función es sólo permitir que sus hijos sean dibujados en orden.

3- Todos los sprites a los que les quieras hacer sorting, el del player, los árboles, etc, deben tener el punto de origen en la misma posición respecto al suelo. Te recomiendo colocar el origen en Y en el punto más bajo de los sprites (tal como lo hace la chica del video).

4- Los objetos que quieras dibujar con profundidad NO DEBEN dibujarse de forma normal. En Game Maker, cuando dejas el evento de Draw en blanco, se dibuja por defecto el sprite del objeto, así que para evitar eso, debes llenar el evento de dibujo de cada objeto que quieras meter al sorting con un comentario. Ej: "//hola".

Una vez hecho esto, procedemos al script en sí.
Create Event.
grid = ds_grid_create(1,1) //Creamos una grid cualquiera

Game End Event
if ds_exists(grid,ds_type_grid) ds_grid_destroy(grid) //Eliminamos la grid cuando termine el juego

Draw Event
var num = instance_number(obj_sort) //Recibe el número de objetos que debo dibujar

if num > 0 { //Evita que se ejecuta el código si no debo dibujar nada.
ds_grid_resize(grid,2,instance_number(obj_sort)) //Ajusta el tamaño de la grid a la cantidad de objetos a dibujar
var counter = 0 //Establece un contador para llenar la GRID
with obj_sort { //El código de abajo lo ejecuta una vez por cada obj_sort en la room
ds_grid_set(other.grid,0,counter,id) //Setea el ID en la columna 0
ds_grid_set(other.grid,1,counter,y) //Setea la coordenada Y en la columna 1
counter += 1 //Incrementa el contador para ingresar el siguiente registro
}

ds_grid_sort(grid,1,true) //Ordena la lista de ID según su coordenada Y

for (var i=0; i<ds_grid_height(grid); i+=1) { //Hace un loop por cada registro de la grid
var draw_id = ds_grid_get(grid,0,i) //Recibe el ID del objeto a dibujar
with draw_id draw_self() //Ejecuta el evento de dibujo de ese material.
}
}


Saludos
208
Preguntas y respuestas / Re:collision objet
Septiembre 01, 2018, 12:31:01 AM
Hola Francos
Lo más sencillo que se me ocurre es que cuando ambos enemigo1 colisionen entre ellos, tomen la dirección opuesta.

En el evento colisión del enemigo1 con el enemigo1 pone:
Si tu juego se ve desde arriba
direction = point_direction(other.x,other.y,x,y) //Calcula la dirección desde el otro objeto hasta mi. Si usas tu propia variable de dirección, pones tu variable en vez de "direction"
speed = velocidad //Setea mi velocidad (no es 100% necesaria esta línea, en teoría la velocidad debería estar seteada de antes)

Si tu juego se ve de lado
hspeed = (velocidad)*sign(x-other.x) //Si usas tu propia variable de velocidad, usa esa en vez de "hspeed"

Saludos
209
Preguntas y respuestas / Re:Porque no detecta if?
Agosto 29, 2018, 01:41:13 PM
Hola minordioso

El problema es que estás usándo paréntesis redondo en vez de las llaves de código "{" y "}"

Prueba con esto:
repeat(abs(intVX))
    {
    if  (!place_meeting(x + intVX, y, Obj_Suelo))
    {
    x += intVX
    }
    else
    {
        intVX =0;
        break;
    }
}


Saludos
210
Hola FernandoNavarro
Puede ser el orden de creación de las cosas. Quizás primero se crea el player e intenta manipular una variable inexistente y luego se crea tu control que intenta crear la variable.

El orden se corrige desde el editor de rooms, en la pestaña settings, hay un cuadro que dice "instance order". Pone tu control arriba del todo.

Lo otro que puede solucionar tu problema es que crees la variable en el mismo objeto player, como es global, da lo mismo que objeto la crea porque todos la podrán manipular.

Saludos