Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: [Solucionado] Problema con rotación de sprite en torno a 0º  (Leído 1726 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Guacusio

Bueno, resulta que dentro del programa que estoy preparando necesito girar un sprite mediante la manipulación de la variable image_angle. Este sprite tiene su origen fuera de sí mismo, más abajo, y necesito rotarlo en incrementos muy pequeños, del orden de 0.2 grados por step. El problema es que cuando me acerco al valor cero, el giro se detiene momentáneamente y luego da un salto hasta el nuevo ángulo (todo esto ocurre gráficamente, porque el valor de image_angle sí cambia suavemente). Me parece que es porque el GM aproxima los ángulos con valor absoluto menores a 0.5 a 0, produciéndose este desagradable efecto. Dejo un editable hecho en  :GM6: donde se aprecia el problema.

¿Alguien tiene una idea de cómo corregir este efecto visual?
« última modificación: Noviembre 16, 2009, 02:25:48 am por guacusio »


 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Tyranus

  • Ganador Proyecto Nexo
  • Okupa
  • *
  • Puntos: 68
  • Mensajes: 862
  • Sexo: Masculino
  • No tengo texto personal :(
    • Ver Perfil
    • Tyranus:: Indie Games.
Respuesta #1 en: Noviembre 15, 2009, 08:50:59 pm
Sinceramente ni idea.
Al principio no entendía a que te referías pero modifique el ejemplo ampliándolo y cambiando el evento key por keypressed.

Pues, soluciones, lo que se dice "soluciones" no se me ocurren ninguna. Lo que si, se me ocurren solamente dos ideas locas:
1) reescribir el código de la rotación (cosa que en GM será más que ineficiente).
2) Jugar con las funciones 3d (las que desconozco) ya que seguramente trabajar con superficies será igual.

Lamento no haber aportado algo útil, un saludo!


Desconectado Ciberman

  • Okupa
  • *
  • Puntos: 212
  • Mensajes: 1.221
  • Agradecido: 4 veces
  • Sexo: Masculino
  • Ciberman Games - Un pixel Marca la Diferencia
    • Ver Perfil
    • Ciberman
Respuesta #2 en: Noviembre 15, 2009, 09:01:42 pm
m.. yo uso GM7... nose si en GM6 se nota un cambio como dices, pero yo no veo nada, lo veo perfecto...

prueba abrirlo con GM7 y si sigue saliendo el error gráfico, me avisas y emnpiezo a usar gafas... xD

Cita de: CGM 2008
CGM: Un poco mas serios, mejores Juegos.
Bienvenid@ a CGM. Recomenzamos desde cero, con un reglamento mas estricto, mejor definido y con mas ganas que nunca de hacer juegos con calidad comercial. El que avisa no es traidor: Leete las reglas si no quieres llevarte un capon makero.
Mercilessly!!
Plug-In para animaciones: http://ciberman.net/tweenline/
 


Desconectado SP_Christian

  • Asiduo
  • *
  • Puntos: 0
  • Mensajes: 204
    • Ver Perfil
Respuesta #3 en: Noviembre 15, 2009, 09:04:15 pm
Como tu has dicho es porque el GM redondea el valor de la variable.
Ademas que como el origen lo tiene fuera entonces el efecto es mucho mas pronunciado.
Voy a investigar yo tambien con el editable =)
Luego edito
EDIT
Estoy con ciberman, yo tambien lo veo perfecto xD
EDIT2
Y no puede ser una terrible variacion de frames causada por alguna cosa extraña¿ xD
EDIT3
Por no hacer un post tonto: Killer, loco  (lo siento, me he podido resistir) xD
« última modificación: Noviembre 15, 2009, 09:39:27 pm por SP_Christian »

 


Desconectado Alfonsos1

Respuesta #4 en: Noviembre 15, 2009, 09:05:09 pm
si gira repentinamente solo cuando se aproxima a 0 talves si usas una variable ANGULO y usas dos imagene se solucione, osea la imagen normal y la normal rotada en -180 grados

La variable ANGULO seria el angulo del objeto, pero no nesesariamente de su imagen


si ANGULO esta entre 90 a 270 la imagen normal y image_angulo igual a ANGULO,
si ANGULO esta entre 270-360 o 0-90 la imagen rotada y image_angulo igual ANGULO +180,

Lego cuando gires cambia solo la variable ANGULO no y no el image_angulo o como se llame...

esto aria que el image_angulo varie solo entre 90 y 270
« última modificación: Noviembre 15, 2009, 09:20:51 pm por Alfonsos1 »

 


Desconectado Killer

Respuesta #5 en: Noviembre 15, 2009, 09:22:31 pm
Llamenme loco, pero que tal si simplemente se evita que image_angle se aproxime a 0. Simplemente en el evento que se use para disminuir image_angle se agrega algo como esto:

Código: [Seleccionar]
if image_angle<10 image_angle+=360;

 


Desconectado Guacusio

Respuesta #6 en: Noviembre 16, 2009, 02:25:25 am
Bueno, primero gracias por las respuestas. No voy a cambiar al modo 3D para esto, sería desastroso si partí trabajando en 2D. No puedo probarlo en GM7 pero sospecho que debería ocurrir lo mismo a menos que se haya corregido este bug (porque eso es). No es una variación de frames, éstos permanecen iguales. Tampoco puedo darme el lujo de tener 2 imágenes de lo mismo. Sin embargo, logré solucionar el problema y me acabo de encontrar con que Killer también dio en el clavo: sumar 360 al ángulo cuando se acerque a cero. Como sospechaba, ocurre por un asunto de redondeo del ángulo a cero cuando se acerca a dicho valor; no ocurre ni con 90, 180, 270, 360 ni ningún otro ángulo, sólo con cero. Seguramente es porque don Mark Overmars pensó que cuando le damos un ángulo pequeñito queremos decir que el sprite esté "derecho" y lo asume como cero. Como me pasa con ángulos cuyo módulo es menor a 1º, voy a sumarle 360º si baja de este valor.