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.

Temas - avengeralt

1
Bueno, comento lo que me ocurre.

Estoy intentando hacer que mi personaje haga un movimiento de "Rodar" con la barra espaciadora.
Todo funciona bien salvo por un error y es que, cuando mantengo pulsada la barra espaciadora, la velocidad de movimiento aumentada para el movimiento de rodar no vuelve a su posición natural.

Tengo una variable para la velocidad de movimiento, y cuando pulso la barra espaciadora junto a otro botón de dirección, esta es aumentada y cambia el sprite para que se vea que está rodando. El problema es que yo quiero que afecte solamente UNA VEZ: que la barra espaciadora solo afecte cuando es pulsada la primera vez sin importar que luego lo mantengas pulsado o no (para así solucionar el error).

keyboard_check...?????

¿Alguien que resuelva mi duda? Muchas gracias :)
2
Mi pregunta es la siguiente: ¿Cómo puedo hacer que mi objeto Player cuando choque contra algún objeto irregular, por ejemplo una esquina, en vez de quedarse bloqueado al chocar, que este deslice buscando una nueva posición?

En mi mapa hay unos árboles, y al chocar contra el tronco, el personaje se queda totalmente parado. Puede moverse, y está todo bien, pero me gustaría mejorarlo haciendo que mi personaje deslice en el árbol en vez de quedarse totalmente quieto al chocar. ¿Es esto posible? ¿Cómo podría hacerlo? Gracias.
3
El título es mi pregunta.

¿Qué función sería la correcta para añadir a un script, en la que cambie el sprite a un objeto en concreto?
He estado usando la siguiente, pero no me ha funcionado:

[gml]object_set_sprite("objeto", "sprite");[/gml]

:-[
4
Hola, muy buenas. Antes de nada, decir que llevo muy pocos días en este mundo y soy un completo novato (espero que tengáis paciencia conmigo). Bueno, aquí os expongo mi problema, a ver si podéis ayudarme a resolverlo porque lo he intentado de diferentes maneras por mi mismo pero estoy atascado así que: aquí estoy.

Estoy haciendo un movimiento de personaje WASD con posiciones en diagonal, tanto para "Stand" como para "Walk", aquí os dejo la parte del código dónde tengo el problema:

[gml]//movimiento
left = keyboard_check(ord("A"));
right = keyboard_check(ord("D"));
up = keyboard_check(ord("W"));
down = keyboard_check(ord("S"));
diagonalupleft = up and left;
diagonalupright = up and right;
diagonaldownleft = down and left
diagonaldownright = down and right;
//Walk
if (left) {sprite_index = sprDemonWalkL; }
if (right) {sprite_index = sprDemonWalkR; }
if (up) {sprite_index = sprDemonWalkU; }
if (down) {sprite_index = sprDemonWalkD; }
if (diagonalupleft) {sprite_index = sprDemonWalkDiagonalUpL; }
if (diagonalupright) {sprite_index = sprDemonWalkDiagonalUpR; }
if (diagonaldownleft) {sprite_index = sprDemonWalkDiagonalDownL; }
if (diagonaldownright) {sprite_index = sprDemonWalkDiagonalDownR; }
//Stand
if keyboard_check_released(ord("A")) {sprite_index = sprDemonStandL; }
if keyboard_check_released(ord("D")) {sprite_index = sprDemonStandR; }
if keyboard_check_released(ord("W")) {sprite_index = sprDemonStandU; }
if keyboard_check_released(ord("S")) {sprite_index= sprDemonStandD; }
//????RESOLVER STAND DIAGONALES
if keyboard_check_released(ord("W")) and keyboard_check_released(ord("A")) {sprite_index = sprDemonStandDiagonalUpL; }
if keyboard_check_released(ord("W")) and keyboard_check_released(ord("D")) {sprite_index = sprDemonStandDiagonalUpR; }
if keyboard_check_released(ord("S")) and keyboard_check_released(ord("A")) {sprite_index = sprDemonStandDiagonalDownL; }
if keyboard_check_released(ord("S")) and keyboard_check_released(ord("D")) {sprite_index = sprDemonStandDiagonalDownR; }[/gml]

Como podréis imaginar, todo va bien hasta que cuando pulso por ejemplo "A + W" para moverme hacia la diagonal superior izquierda, el personaje se mueve correctamente con el Sprite indicado, pero a la hora de soltar los botones, pelean las funciones de Stand para "derecha, izquierda, arriba, abajo", por lo que a veces (cuando sueltas los botones al mismo tiempo), se queda en la posición correcta, mientras que (normalmente), al no soltarse al mismo tiempo, se queda en una posición "Stand" incorrecta.

He probado varias cosas, incluso intenté hacer una especie de "Cheat", dónde diferentes combinaciones de botones (según el timeing), me devolviera a la posición correcta. Lo intenté, pero no me salió bien. Añadí al "combo" los botones "Up", para que el combo contara cuando soltara los botones. Traté de hacer combinaciones tipo "AWAW" "WAWA" "AWWA" "WAAW" y diferentes posibilidades para que el personaje terminase en la posición correcta, pero no me salió bien. Obviamente no tengo los conocimientos como para que eso me saliera bien, pero bueno, yo lo intenté.

He probado a devolver la posición según a qué grados se dirige el personaje y también he probado a poner la posición "Stand" dentro del mismo sprite (siendo este el primero y así saltarlo cuando se moviera), pero tampoco me resultó. Imagino que todas las posibilidades que intenté podrían haber sido viables pero no tengo los conocimientos todavía.

Me gustaría resolver este problema de la manera más rápida y sin tener que volver a hacer todo el código de nuevo (que ya lo he intentado también), aunque si no tuviera elección, lo haría. Por favor, os agradecería mucho si me ayudarais con este problemita para poder avanzar en el juego. He añadido otras funciones, tipo sprint y próximamente botones de ataque, pero me tiene frustrado este problema ya que yo quiero que la posición a la que se devuelva diagonalmente sea siempre correcta (y quiero que mi juego sea por movimiento WASD). Digo lo del movimiento WASD porque no quiero tener que añadir los movimientos diagonales a "Q" o "E" por ejemplo, porque sería muy rara la jugabilidad, (esto ya lo he hecho también pero no es lo que busco). Gracias de antemano, espero que podáis ayudarme.