Duda con timer

Iniciado por llAudioslavell, 23 Marzo 2013, 08:49 AM

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

llAudioslavell

Hola a todos
bueno estoy creando un pequeño juego y me eh topado con un problema....
Tengo mi codigo dentro de un timer, lo que hace es cada segundo mover un picturebox  en linea recta como si fuera un coche.... pero yo necesito que despues de X segundos vuelva a ejecutarse nuevamente el codigo para que movilize a otro picturebox

    Private Sub Carril1(ByVal obj As Control, ByVal x As Integer, ByVal y As Integer)

    End Sub

    Private Sub Timer1_Tick(B...............

   Carril1(Button6, C1x, C1y)

    End Sub
Es como si fuera una carrera de coches, ojala que me haya dejado entender... agradeceria bastante si me ayudasen solo quiero que me den una idea.... no quiero que me dean codigo solo una idea o pista

$Edu$

Tenes 2 timers, que cada 1 segundos mueven un picturebox. Y otro que cada X tiempo active el segundo. Los 2 timers llamaran a tu funcion MoverCarril(byref carro as Control, byval x As integer, Byval y as Integer), pero tendran como diferencia lo que se envie como argumento. En este Timer es donde haras tus calculaciones para ver cual se movera mas rapido, aunque no se que haras.

O tu no sabes cuantos autos habra? Si es asi, tendrias que crear los Timers en tiempo real como array de controles con un bucle que sera la cantidad de autos que andaran.

llAudioslavell

#2
Cita de: $Edu$ en 23 Marzo 2013, 17:46 PM
Tenes 2 timers, que cada 1 segundos mueven un picturebox. Y otro que cada X tiempo active el segundo. Los 2 timers llamaran a tu funcion MoverCarril(byref carro as Control, byval x As integer, Byval y as Integer), pero tendran como diferencia lo que se envie como argumento. En este Timer es donde haras tus calculaciones para ver cual se movera mas rapido, aunque no se que haras.

O tu no sabes cuantos autos habra? Si es asi, tendrias que crear los Timers en tiempo real como array de controles con un bucle que sera la cantidad de autos que andaran.

solo 2 autos pasaran por el mismo carril mi estimado, el problema es que nose como activar el 2do auto para que se visualize pero en X segundos..  yo pienso que es un Random pero la verdad nose como hacerlo.... iluminame.

llAudioslavell

Cita de: Audioslave™ en 24 Marzo 2013, 08:25 AM
solo 2 autos pasaran por el mismo carril mi estimado, el problema es que nose como activar el 2do auto para que se visualize pero en X segundos..  yo pienso que es un Random pero la verdad nose como hacerlo.... iluminame.

Duda:
esto se podria hacer con 1 timer? o es necesario otro mas....
yo lo estoy intentando con solo 1, dime de que manera seria mejor... gracias !!

Eleкtro

#4
Cita de: Audioslave™ en 23 Marzo 2013, 08:49 AM
Tengo mi codigo dentro de un timer, lo que hace es cada segundo mover un picturebox  en linea recta como si fuera un coche....pero yo necesito que despues de X segundos vuelva a ejecutarse nuevamente el codigo para que movilize a otro picturebox

Se me ocurre que podrías modificar el atributo "TAG" del timer para especificar (en modo de string) e identificar el control que quieres mover.

Aquí tienes un ejemplo que acabo de hacer, por si te sirve, aunque en lugar de usar el tag para especificar el control, lo hago para especificar la dirección (me aburría xD), puedes ajustarlo a tus necesidades...



Código (vbnet) [Seleccionar]
Public Class Form1

   ' Añade 1 button y 2 picturebox al form

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       MoveControl(PictureBox1, Direction.Up, 1, 2000)
       While StartMove.Enabled : Application.DoEvents() : End While
       MoveControl(PictureBox2, Direction.Up, 200, 10000)
   End Sub

#Region " Move controls "

   Dim ControlToMove As Control
   Dim StartMove As New Timer
   Dim EndMove As New Timer

   Public Enum Direction
       Up = 0
       Down = 1
       Left = 2
       Right = 3
   End Enum

   Public Sub MoveControl(ByVal Control As Control, _
                          ByVal Direction As Direction, _
                          ByVal Interval As Int16, _
                          ByVal TimeOut As Int16)

       ControlToMove = Control

       StartMove.Tag = Direction

       AddHandler StartMove.Tick, AddressOf StartMove_Tick
       AddHandler EndMove.Tick, AddressOf EndMove_Tick

       StartMove.Interval = Interval
       EndMove.Interval = TimeOut

       StartMove.Start()
       EndMove.Start()

   End Sub

   Private Sub StartMove_Tick(sender As Object, e As EventArgs)
       Select Case sender.tag
           Case 0 : ControlToMove.Location = New Point(ControlToMove.Location.X, ControlToMove.Location.Y - 1)
           Case 1 : ControlToMove.Location = New Point(ControlToMove.Location.X, ControlToMove.Location.Y + 1)
           Case 2 : ControlToMove.Location = New Point(ControlToMove.Location.X - 1, ControlToMove.Location.Y)
           Case 3 : ControlToMove.Location = New Point(ControlToMove.Location.X + 1, ControlToMove.Location.Y)
       End Select
   End Sub

   Private Sub EndMove_Tick(sender As Object, e As EventArgs)
       StartMove.Stop()
       EndMove.Stop()
   End Sub

#End Region

End Class








$Edu$

Seria usando algo como lo que hice Elektro, pero sin usar el Enum Direction y solo llamando asi:

MoveControl(PictureBox2, NumeroRandom1, NumeroRandom2, NumeroRandom3)

Esos numeros Randoms los generaras antes (busca en google como generar numeros random vb.net elguille)

Pero realmente no se que haras, si nos explicas como seria todo el juego completo seria mejor.

llAudioslavell

Que creo que ya lo resolvi... solo que aun me quedan unos problemas pero si creo poder mejorarlo... tengo una duda,en una  #Region....   que  codigo puedo agrupar ahi... o no entiendo  :-\

$Edu$

Eso simplemente es para agrupar codigo que te parezca a ti que no necesitas verlo todo el tiempo. Por ejemplo si tienes muchas funciones, las agrupas asi con el IDE puedes "cerrar" la region para que quede sin verse tanto codigo que no estas necesitando. Es solo algo que maneja el IDE de visual studio, para los programadores, pero no interfiere en nada con el programa que realizaras.

Eleкtro

Regiones, sumários de código XML y Namespaces, todo es para mantener el código ordenado, aunque los Namespaces si que interfieren en el código (se le da un uso más fácil) pero a mi punto de vista es más para organizar el código.

saludos