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

16
Fácil, pon la acción en el evento Key Press y no en el evento Keyboard.
17
Hazlo con coordenadas. Que el enemigo se de la vuelta cuando llegue a cierta coordenada X o Y
18
Preguntas y respuestas / Re:evento step
Abril 01, 2013, 10:43:11 PM
Cita de: carras en Abril 01, 2013, 08:48:41 PM
Que tipo de movimientos?
Entonces el step es como el evento alarm

Mmm, pues puedes imaginar que el STEP es un Alarm con tiempo igual a 1 que se repite infinitamente mientras el juego está corriendo.

Lo puedes ver de esa forma, pero creo que eso es más complicado que saber simplemente que el step es un evento que se ejecuta en cada "instante" del juego.
19
Puedes poner un if (saltando = false) {... antes de cada acción. Y esa variable que sea true mientras el personaje salta.
20
¿Cómo que no? Al contrario, ayudaste un montón.

Excelente, mucho mejor ese formato jajaja.

Gracias por todo bro!
21
Lo primero que se me ocurre es crear una variable que detecte la colisión. Por ejemplo: "detectado = false" en el evento Create. Luego en el evento de colisión con el objeto pones:

if detectado = false
{
//restas la variable que quieras
detectado = true
}

Y vuelves a poner el detectado en false cuando, no sé, vuelvas a presionar una tecla de movimiento o qué sé yo.

Otra opción (y depende de si tu juego permite hacerlo de esta forma) es poner la variable en el objeto con el que colisionas y no en tu personaje, pero cada objeto solo te va a restar la variable UNA vez. Al menos que pongas, por ejemplo, una alarma en ese objeto para que te reste esa variable cada tantos segundos mientras lo estés tocando.

Todo depende,  pon más información para darte una ayuda más precisa.
22
Demasiado enredo jaja  XD...

Solucioné el problema de una forma un tanto "fea" y "pobre" pero a fin de cuentas está solucionado, puse esto en el evento press <Space> del personaje (que es la tecla que lo hace caminar por la ruta luego de que uno la traza:

if xx > x && place_free(x+1.5, y) {x += 1.5}
if xx < x && place_free(x-1.5, y) {x -= 1.5}
if yy > y && place_free(x, y+1.5) {y += 1.5}
if yy < y && place_free(x, y-1.5) {y -= 1.5}
mover = true


Eso lo desatasca de las paredes justo antes de mover la bolita. Igualmente espero en un futuro darle una solución decente a eso.

Una pregunta, ¿cómo haces que tu código se vea así grande y con los colores que identifican a las variables y funciones?
23
Tiene máscara circular. Cada vez que le cambio algo al código, lo pruebo con las distintas máscaras (precisa, circular). Con rectangular ni hablar, el sprite es redondo por lo que no funciona esa máscara.

¿Con ese tipo de movimiento que uso hay alguna forma de saber la coordenada de cada step antes de darlo? En ese caso puedo usar instance_place para que el personaje nunca llegue a tocar la pared.
24
Lo coloqué de este modo haciendo lo que dices de primero chequear y luego mover:
if mover = true
{
var dx, dy;
dx=lengthdir_x(1, point_direction(x,y, xx,yy));
dy=lengthdir_y(1, point_direction(x,y, xx,yy));

if !place_free(x+dx, y+dy)
{
    mover = false
    ds_queue_clear(xCola)
    ds_queue_clear(yCola)
    with (obj_point) {instance_destroy()}
}
else
{
repeat(velocidad)
    {
    x += place_free(x+dx, y)*dx;
    y += place_free(x, y+dy)*dy;
    }
image_angle = point_direction(x,y, xx,yy);
}


Pero sigue pasando lo mismo.

Estoy buscando la forma de que el personaje detenga el movimiento 1 o 2 píxeles antes de llegar a la pared, pero se hace difícil por la forma en la que se mueve el personaje.

EDIT:

El problema lo da el image_angle = point_direction(x,y, xx,yy). Al girar la imagen queda un píxel dentro de la pared o algo así.

Cierto, disculpa por el doble post. Es que ando ya desesperado.
25
Bruno ¿sabes de qué me he dado cuenta? Que sea cual sea el código que usemos para movimiento, el problema de quedarse atascado el personaje NUNCA pasa cuando quito el image_angle = point_direction(x,y, xx,yy)
26
Con ese código se mueve bien el personaje, pero cuando toca la pared se queda todo trancado porque no tengo un condicional donde diga que:

if (el personaje llega a la pared) {mover = false; limpiar colas; destruir el punto al que uno llega;}

Entonces a éste último código le puse el condicional que usábamos en los códigos anteriores, quedando así:

image_angle = point_direction(x,y, xx,yy);
var dx, dy;
dx=lengthdir_x(1, image_angle);
dy=lengthdir_y(1, image_angle);
repeat(velocidad){
    x += place_free(x+dx, y)*dx;
    y += place_free(x, y+dy)*dy;
   
if !place_free(x+dx, y+dy)
{
    mover = false
    ds_queue_clear(xCola)
    ds_queue_clear(yCola)
    with (obj_point) {instance_destroy()}
    break;
}


Pero entonces sigue pasando lo mismo, por lo que creo que el problema está en ese condicional.
27
Hermano revisa el código, el place_free(x,y) devuelve true o false, con ese código le estas sumando siempre 1 a la "x" y a la "y" del personaje, se va a mover siempre hacia abajo y la derecha xD
28
Bruno, el código funciona excelente, pero a veces se sigue quedando atascada la bola cuando, estando pegada a una pared, el ángulo en el que la muevo está muy cerrado pero no lo suficiente como para que su trayectoria sea casi paralela a la pared.

Te pongo una imagen para explicarme bien. (Ve la imagen por favor) Cuando estoy así de pegado a la pared y trato de moverlo en esa dirección o un poco más abajo, no se mueve. En cambio si le trazo una línea recta hacia la derecha sí se mueve (a veces).
Muy rara vez pasa que tengo que hacerle la línea casi completamente hacia abajo para que pueda moverse de ahí.
He probado tildando y destildando la Precise collision checking de la pared y de la bola pero nada que se acomoda.
29
No no, ya está listo hermano, lee el EDIT de mi post anterior. Tu código funcionó perfecto.
30
No me funciona, le puse varios valores a "vel" pero o no se mueve, o se mueve todo extraño, o se queda titilando el personaje, se duplica... O.o

Qué karma las colisiones en el Game Maker  :'(

EDIT:

¡ME FUNCIONO! Es que me había puesto a cambiar los "1" de los lengthdir por números más altos pensando que así iba a subir la velocidad (no me preguntes por qué pensé eso xD una laguna mental ahí jajaja).

Pero sí, ya funciona perfecto el movimiento y la colisión, lo único que tuve que modificar fue:

image_angle = point_direction(x,y,xx,yy)

Porque como lo tenía igual a direction y ahora no usa direction, la imagen no rotaba.

Muchas gracias otra vez, no había visto nunca ese código para movimiento, grande bruno  ;D