Tema Gráficos. Movimientos Sprite. Visual Basic 2013 (Solucionado)

Iniciado por Tazmania40, 21 Octubre 2016, 14:02 PM

0 Miembros y 2 Visitantes están viendo este tema.

Tazmania40

#10
Buenas otra vez, para acabar comentarte El Benjo que tienes razón respecto al dibujado, tan solo añadí a la estructura otra variable de tipo Boleano y cuando esta False no lo dibujo y no influye en las coordenadas. El tema Dispose lo elimino como en anteriores juegos en Form1_FormClosing puesto que como ya dije no soy muchos los objetos, si creara una clase entonces si tendría que implementar Disposing como en el enlace que puse.

Respecto a Theread.Sleep() ahí tengo que discrepar, aunque voy a realizar una nueva pregunta y decir solucionado esta puesto que hacía referencia a Mover un Sprite. Según el código que expuse al principio

Código (vb.net) [Seleccionar]

Protected Overrides Sub OnPaint(e As PaintEventArgs)
   Dim de As Graphics = e.Graphics
   MOVER()
   DIBUJAR(de)
   'Thread.Sleep(100)                                  ' No lo pongo, va bien el programa
End Sub


veo que la velocidad el juego va bien sin poner el retardo, es más si lo pongo aunque sea Thread.Sleep(1) se ralentiza demasiado y no me interesa. Para aumentar la velocidad tan solo tengo que aumentar el código siguiente

Código (vb.net) [Seleccionar]

Private Sub MOVER()
   Bola1.Pos.X = Bola1.Pos.X + 1                 ' Aquí es donde aumentamos velocidad +2, +3 ....
   Bola2.Pos.X = Bola2.Pos.X + 1

   If Bola1.Pos.X >= 800 Then Bola1.Pos.X = 0
   If Bola2.Pos.X >= 800 Then Bola2.Pos.X = 0
   Invalidate()                                  ' Vuelva a dibujar el control
End Sub


donde los objetos los movemos más rápidos, el valor mínimo es 1 puesto que es de tipo Point y representa el pixel en pantalla. Es una buena velocidad para un procesador I5, I3, pero baja un poco en un DUAL Core y sobre todo se ralentiza en un Pentium IV. Solución aumentar a +2 o +3 los objetos. Por eso voy a exponer otra nueva pregunta, aunque intentaré buscar por mi cuenta como siempre.

Gracias y saludos

El Benjo

Tienes razón en que el Thread.Sleep() te alenta el juego, pero yo no te decía que lo pusieras en el evento OnPaint() sino que tienes que crear un hilo al comenzar el juego y en ese hilo llamas a la función que mueve los objetos, después a la que los dibuja y después (dentro del mismo hilo) haces un retardo. Lo que hace esto es que en todos los procesadores te vaya a la misma velocidad, para que no se ejecute en "cámara rápida" en procesadores con mucha capacidad de procesamiento.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

Tazmania40

Lo que comentas es como el control Timer, donde efectivamente en todos los equipos te va a la misma velocidad, es lo que utilizaba anteriormente, pero al utilizar este nuevo modo con "protected overrides Sub OnPaint" el movimiento y la carga es fluida y se ve muy bien y no hay reflejo, solo tenía que solucionar el tema de retardo en diferentes procesadores y de momento encontré una clase llamada Stopwatch, lo he dicho en el otro post. Aquí tienes el enlace, estoy con pruebas pero veo que es satisfactorio. La forma que comentas creo yo que no me va a ir tan bien como esta y se parecerá al utilizar Timer.

https://msdn.microsoft.com/es-es/library/system.diagnostics.stopwatch

Saludos