Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ejemplo De Movimiento De Un Objeto Dibujado En Un DrawingArea
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Ejemplo De Movimiento De Un Objeto Dibujado En Un DrawingArea 
 
Hola!.

Es el primer ejemplo que hago dibujando en el control DrawingArea y no desplazando un control Picturebox sobre el.
El ejemplo es muy sencillo.

Este ejemplo primero lo hice con una clase heredada Picturebox y este lo desplazaba por el DrawingArea.
Y luego decidí hacerlo con un picture y desplazar este.

Se pretende que el dibujo se desplace un cuadrado de celda cada movimiento. Así que salta de uno en uno los cuadrados.

En este ejemplo veremos:

- Actualizamos el contenido del DrawingArea cada cierto tiempo. No se usa cached a true.
- Uso un poco de aritmética modular para que el objeto si sale por un extremo del area de dibujo, entre por el lado contrario.
- Uso de timers. En este caso tres. Un Timer se encarga de refrescar el control de dibujo cada 16 segundos, un timer para
  comprobar si el objeto esta sobre otro. Y el ultimo para mostrar un valor en un labelcd
- El uso de la rejilla para ver por donde van y como se colocan los objetos en el área de dibujo.

 primerejemplo

Este es el código:

Const celda As Integer = 48
Private htux As Picture
Private htuxpos As Point
Private hpc As Picture
Private hpcpos As Point

Private cuentapcs As Integer
Private contador As Integer

Public Sub _new()  
  
End

Public Sub Form_Open()
  
  Me.Center
  Randomize  
  htux = Picture.Load("Tux2.png")
  htuxpos = GeneraPosicion()
  
  hpc = Picture.Load("Pc.png")
  hpcpos = GeneraPosicion()
  
  Timer1.Start
  Timer_Encontrar.Start
  Tiempo_Pasado.Start
  
End

Public Sub Form_KeyPress()

    Select Case Key.Code
      Case Key.Left
        htuxpos.X -= celda
      Case Key.Right
        htuxpos.X += celda
      Case Key.Up
        htuxpos.Y -= celda
      Case Key.Down
        htuxpos.Y += celda
    End Select
    
    htuxpos.X = htuxpos.X Mod DrawingArea1.Width
    If htuxpos.x < 0 Then htuxpos.X = DrawingArea1.Width - celda
    htuxpos.Y = htuxpos.Y Mod DrawingArea1.Height
    If htuxpos.Y < 0 Then htuxpos.Y = DrawingArea1.Height - celda
  
End

Public Sub Timer_Encontrar_Timer()  

  If cuentapcs < 3 Then
    If htuxpos.X = hpcpos.x And htuxpos.Y = hpcpos.Y Then            
      Tiempo_Pasado.Stop
      hpc = Null    
      Message.Title = "Tux"
      Message.Info("Yupi!")
      contador = 0
      cuentapcs += 1      
      hpc = Picture.Load("Pc.png")
      hpcpos = GeneraPosicion()      
      Tiempo_Pasado.Start
    Endif
  Else      
    Timer_Encontrar.Stop
    Tiempo_Pasado.Stop
    Timer1.Stop
    Message.Title = "Aviso"
    Message.Info("Tienes 3 Pc's")    
  Endif      
End

Public Sub Timer1_Timer()  
  DrawingArea1.Refresh  
End

Public Sub DrawingArea1_Draw()  
  
  DibujaRejilla  
  Draw.Picture(htux, htuxpos.X, htuxpos.Y)
  If cuentapcs < 3 And hpc <> Null Then Draw.Picture(hpc, hpcpos.X, hpcpos.y)
    
End

Public Sub GeneraPosicion() As Point  
  
  Dim punto As New Point
  
  punto.X = Int(Rnd(10)) * celda
  punto.Y = Int(Rnd(10)) * celda
  
  Return punto    
  
End

Public Sub DibujaRejilla()  
  
  Dim x As Integer
  Dim y As Integer
  
  For y = 0 To DrawingArea1.Height Step celda
    Draw.Line(0, y, DrawingArea1.Height, y)  
  Next
  For x = 0 To DrawingArea1.Width Step celda
    Draw.Line(x, 0, x, DrawingArea1.Width)
  Next
  
End

Public Sub Tiempo_Pasado_Timer()
  contador += 1
  LCDLabel1.Text = CStr(contador)
End


Public Sub TlbSalir_Click()
  Message.Title = "Programador"  
  Select Case Message.Question("¿ Te ha gustado ?", "Si", "Mmm", "Vale!")  
  Case 1
      Message.Title = "Respuesta"  
      Message.Info("Gracias!")
  Case 2
      Message.Title = "Respuesta"  
      Message.Error("Eeeeh!.:-)")
  Case 3
      Message.Title = "Respuesta"  
      Message.Info("Pues claro!. :-D")
  End Select
  Me.Close
  
End
 


Y aquí el ejemplo para descargar.

Jugando también se aprende.

Saludos

MoverObjeto.tar.gz
Descripción:  
Descargar
Nombre del archivo: MoverObjeto.tar.gz
Tamaño: 14.81 KB
Descargado: 34 veces
MoverObjeto.tar.gz
Descripción:  
Descargar
Nombre del archivo: MoverObjeto.tar.gz
Tamaño: 14.81 KB
Descargado: 34 veces
MoverObjeto.tar.gz
Descripción:  
Descargar
Nombre del archivo: MoverObjeto.tar.gz
Tamaño: 14.81 KB
Descargado: 34 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo De Movimiento De Un Objeto Dibujado En Un DrawingArea 
 
Está muy chulo!

Veo que has usado el evento Draw y el refresco del drawing area mediante el  Timer a 16ms. Bien, pero en este caso concreto no parece necesario refrescar 60 veces por segundo, porque realmente no hay animación, sino cambios de posición. Prueba a colocar el .Refresh por ejemplo en el evento KeyPress y eliminar el timer1. Te ahorrarás unos cuantos ciclos de procesador.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo De Movimiento De Un Objeto Dibujado En Un DrawingArea 
 
Jesús:

Gracias.

Probare la idea.

¿ Que puedes comentarme de cuando sale por los extremos el objeto ?.
Con mod solo funciona en dos ocasiones.De ahí a tener que comprobar
de otra manera, cuando es menor que 0 la "x" o la "y".

Creía que con mod me valdría para los cuatro bordes.  

Tengo otro juego pendiente pero tengo que hacerle cambios. Es del tipo Life.
Y no se si las células responden correctamente.

Ahora tengo que cambiar también la forma en como presenta las células e ir acostumbrándome cada
vez mas a la clase Paint.

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo De Movimiento De Un Objeto Dibujado En Un DrawingArea 
 
Shell:

Esta chulo  

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron