Estoy teniendo un problema que no consigo comprender, he probado de muchas maneras (leyendo el manual y no encuentro la manera de conseguir cambiarlo) mi problema está cuando se muestra la animación de correr de mi sprite, está muy acelerada.
En el evento create de mi personaje tengo el siguiente código (que lo que hace es indicar el cambio de sprite en 8 direcciones):
// sprite directions
sprite[0,0] = spr_northwest;
sprite[0,1] = spr_west;
sprite[0,2] = spr_southwest;
sprite[1,0] = spr_north;
sprite[1,2] = spr_south;
sprite[2,0] = spr_northeast;
sprite[2,1] = spr_east;
sprite[2,2] = spr_southeast;
Leyendo el manual para cambiar la velocidad del sprite debería añadir esto:
// animation speed
image_speed = 0.15;
Pero no me funciona, no sé como ponerlo ya. Por mucho que cambie en eso, y lo ponga incluso a 0 la animación sigue a la misma velocidad.
El atributo image_speed es el que regula la velocidad de la animación. Tienes que hacer que sea mayor a 0 si el personaje se mueve y igual a 0 una vez el personaje este quieto. También sugeriría que al quedarse quieto ademas pongas también a 0 la variable image_number.
Igual lo que te iría mejor es dejar en todo momento image_speed a 0 y que si se pulsa las teclas de movimientos varíes directamente image_number.
La instrucción en sí está bien. Si le pones 0 y no cambia, probablemente es porque estas usando o un objeto o un evento que no es el correcto. Siempre que se usa un engine de otra persona, se está a merced de la organización e ideología de esa persona. También habría qué ver cuántas subimágenes tenia originalmente cada sprite animado y cuántas subimágenes tienen tus sprites.
Cita de: penumbra en Julio 23, 2014, 08:10:23 PM
La instrucción en sí está bien. Si le pones 0 y no cambia, probablemente es porque estas usando o un objeto o un evento que no es el correcto. Siempre que se usa un engine de otra persona, se está a merced de la organización e ideología de esa persona. También habría qué ver cuántas subimágenes tenia originalmente cada sprite animado y cuántas subimágenes tienen tus sprites.
No estoy usando ningún engine, por ahora lo que tengo lo he creado yo con partes de código que ya había creado para otro juego.
Y sinceramente, esto me parece super raro, porque no hay ningún otro código que interfiera en la velocidad de los sprites.
var xDirection, yDirection;
//cuando el jugador presione D tndriamos: xDirection = 1 - 0 = 1
//cuando el jugador presione A tendriamos: xDirection = 0 - 1 = -1
xDirection = keyboard_check(ord('D')) - keyboard_check(ord('A'));
yDirection = keyboard_check(ord('S')) - keyboard_check(ord('W'));
// solo actualizar el sprite si no s mueve en la dirección x o y
if (xDirection != 0 || yDirection != 0) {
sprite_index = sprite[xDirection + 1, yDirection + 1];
}
//multiplica los 3 en esa posicion (Probar)
x += xDirection * 3;
y += yDirection * 3;
Este es el codigo que uso en step para controlar el personaje, luego hago uso de un dpad pero no influye en nada en los sprites. La verdad que no tiene mucho sentido la razón del fallo. Acabo de actualizar a la última versión y no sé si es por eso, o por que hay algo que no estoy viendo..
**Respecto a lo de las imágenes que tendrían los sprites, no sé a que te refieres. No todos tienen los mismos frames, pero nunca me ha dado fallo haciéndolo así.
¿Pero... en qué parte del código especificas la velocidad de la animación? ¿En qué evento? No hay ningún mage_speed = 0.15 en el código que pusiste
Cita de: penumbra en Julio 23, 2014, 09:19:38 PM
¿Pero... en qué parte del código especificas la velocidad de la animación? ¿En qué evento? No hay ningún mage_speed = 0.15 en el código que pusiste
En el primer post, intenté explicar eso.
En el evento create del personaje, mi idea era poner esto para solucionarlo:
// sprite directions
sprite[0,0] = spr_northwest;
sprite[0,1] = spr_west;
sprite[0,2] = spr_southwest;
sprite[1,0] = spr_north;
sprite[1,2] = spr_south;
sprite[2,0] = spr_northeast;
sprite[2,1] = spr_east;
sprite[2,2] = spr_southeast;
//velocidad
image_speed = 0.15;
Pero aún poniéndolo así no funciona, mi pregunta es si la ejecución que estoy haciendo es la correcta. Si lo es, no entiendo que puede estar fallando el juego no tiene absolutamente nada más.
(Lo siento por mi vaga explicación, no se como detallar más..)
¿Qué pasa si lees el estado de la variable image_speed?, por ejemplo poniendo en un evento key press:
show_message("image_speed="+string(image_speed));
¿Obtienes otro valor distinto a 0.15?
Cita de: LowHertzs en Julio 24, 2014, 12:28:54 AM
En el primer post, intenté explicar eso.
Es cierto, disculpa, pensé que agregabas image_speed en otro evento.
Lo único que se me ocurre que pueda pasar son dos cosas
1. Estás usando el código en un objeto que no corresponde (sé que esto es poco probable, pero sin ver el proyecto es una posibilidad)
2. El objeto es el correcto, pero por alguna razón, la instancia no tiene asociado un sprite_index adecuado o se asocia siempre el mismo sprite
Recordar que sprite_index e image_speed son variables de instancia. Si la instancia tiene o no un sprite asignado correctamente se puede saber mediante el debugger e imprimiendo la variable sprite_index en pantalla. Por ejemplo, el valor dibujado con draw_text (50, 50, sprite_index)
debe coincidir con el valor guardado en el arreglo. Lo que no recuerdo es si una instancia sin sprite asociado tiene un sprite_index de 0 o -1 (creo que sería -1, pero no recuerdo)
En las propiedades del objeto jugador, ¿le has asignado un sprite al objeto? Quizás no, porque tienes el arreglo sprite[]. Si resulta que el objeto jugador no tiene un sprite asociado, querría decir que por algun motivo esto esta fallando
if (xDirection != 0 || yDirection != 0) {
sprite_index = sprite[xDirection + 1, yDirection + 1];
}
¿Qué pasa si en CREATE le asignas un sprite index directamente (sólo para probar) a la instancia?
EDITADO:
3 ¿Tienes algún código en DRAW del objeto jugador? ¿Hay algún otro objeto (aparte del jugador) que dibuje en pantalla?
Cita de: penumbra en Julio 24, 2014, 08:04:28 AM
Cita de: LowHertzs en Julio 24, 2014, 12:28:54 AM
En el primer post, intenté explicar eso.
Es cierto, disculpa, pensé que agregabas image_speed en otro evento.
Lo único que se me ocurre que pueda pasar son dos cosas
1. Estás usando el código en un objeto que no corresponde (sé que esto es poco probable, pero sin ver el proyecto es una posibilidad)
2. El objeto es el correcto, pero por alguna razón, la instancia no tiene asociado un sprite_index adecuado o se asocia siempre el mismo sprite
Recordar que sprite_index e image_speed son variables de instancia. Si la instancia tiene o no un sprite asignado correctamente se puede saber mediante el debugger e imprimiendo la variable sprite_index en pantalla. Por ejemplo, el valor dibujado con draw_text (50, 50, sprite_index) debe coincidir con el valor guardado en el arreglo. Lo que no recuerdo es si una instancia sin sprite asociado tiene un sprite_index de 0 o -1 (creo que sería -1, pero no recuerdo)
En las propiedades del objeto jugador, ¿le has asignado un sprite al objeto? Quizás no, porque tienes el arreglo sprite[]. Si resulta que el objeto jugador no tiene un sprite asociado, querría decir que por algun motivo esto esta fallando
if (xDirection != 0 || yDirection != 0) {
sprite_index = sprite[xDirection + 1, yDirection + 1];
}
¿Qué pasa si en CREATE le asignas un sprite index directamente (sólo para probar) a la instancia?
EDITADO:
3 ¿Tienes algún código en DRAW del objeto jugador? ¿Hay algún otro objeto (aparte del jugador) que dibuje en pantalla?
Tenías razón el fallo estaba en otro evento Draw, el cual bloqueaba la animación del player. (Despistes de iniciado)
Gracias a todos!.