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
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.
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.
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 !!
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...
(http://img13.imageshack.us/img13/177/captura1s.png)
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
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.
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 :-\
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.
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