elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Tema Gráficos. Movimientos Sprite. Visual Basic 2013 (Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Tema Gráficos. Movimientos Sprite. Visual Basic 2013 (Solucionado)  (Leído 10,407 veces)
Tazmania40

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Tema Gráficos. Movimientos Sprite. Visual Basic 2013
« Respuesta #10 en: 31 Octubre 2016, 10:09 am »

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
  1. Protected Overrides Sub OnPaint(e As PaintEventArgs)
  2.    Dim de As Graphics = e.Graphics
  3.    MOVER()
  4.    DIBUJAR(de)
  5.    'Thread.Sleep(100)                                  ' No lo pongo, va bien el programa
  6. 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
  1. Private Sub MOVER()
  2.    Bola1.Pos.X = Bola1.Pos.X + 1                 ' Aquí es donde aumentamos velocidad +2, +3 ....
  3.    Bola2.Pos.X = Bola2.Pos.X + 1
  4.  
  5.    If Bola1.Pos.X >= 800 Then Bola1.Pos.X = 0
  6.    If Bola2.Pos.X >= 800 Then Bola2.Pos.X = 0
  7.    Invalidate()                                  ' Vuelva a dibujar el control
  8. 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


« Última modificación: 31 Octubre 2016, 10:10 am por Tazmania40 » En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: Tema Gráficos. Movimientos Sprite. Visual Basic 2013 (Solucionado)
« Respuesta #11 en: 31 Octubre 2016, 19:08 pm »

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.


En línea

www.es.neftis-ai.com

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

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Tema Gráficos. Movimientos Sprite. Visual Basic 2013 (Solucionado)
« Respuesta #12 en: 31 Octubre 2016, 20:25 pm »

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
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines