Ir ao conteúdo

Posts recomendados

Postado

em VB2010, como posso fazer 1 game loop e timers com precisão?

 o máximo que consigo é 100FPS e só desenhar 2 circulos preenchido com 1 cor 😞


Public Class Form1

    Dim blnGameloop As Boolean = True
    Dim FrameCount As Integer
    Dim FPS As Integer

    Dim result As New Bitmap(900, 500)
    Dim gresult As Graphics = Graphics.FromImage(result)
    Dim g As Graphics
    Dim tmr As Integer

    Dim PosX As Integer
    Dim PosY As Integer

    Private Sub ClearMemory()
        blnGameloop = False
        result.Dispose()
        g.Dispose()
        gresult.Dispose()
        End
    End Sub

    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        ClearMemory()

    End Sub

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If (e.KeyCode = Keys.Escape) Then
            ClearMemory()
        ElseIf (e.KeyCode = Keys.Up) Then
            PosY -= 1
        ElseIf (e.KeyCode = Keys.Down) Then
            PosY += 1
        ElseIf (e.KeyCode = Keys.Left) Then
            PosX -= 1
        ElseIf (e.KeyCode = Keys.Right) Then
            PosX += 1
        End If
    End Sub


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Show()
        Me.Focus()
        tmr = TimeOfDay.Second
        Do

            Application.DoEvents()

            g = Me.CreateGraphics
            gresult.FillRectangle(Brushes.Blue, 0, 0, Me.Width, Me.Height)
            gresult.FillEllipse(Brushes.Aqua, PosX, PosY, 100, 100)
            gresult.FillEllipse(Brushes.Brown, PosX + 50, PosY + 50, 100, 100)
            gresult.DrawString("FPS: " & CStr(FPS), Me.Font, Brushes.Black, 10, 10)
            g.DrawImage(result, 0, 0)
            FrameCount += 1
            If (tmr <> TimeOfDay.Second) Then
                FPS = FrameCount
                FrameCount = 0
                tmr = TimeOfDay.Second
            End If

        Loop While (blnGameloop = True)
    End Sub

End Class

parecem 2 tópicos, mas 1 depende do outro

  • Curtir 1
  • 2 semanas depois...
Postado

ainda bem que testou  o código.. tenho 1DLL criada no VB6, com funções API, e consigo o dobro 😉
mas penso conseguir mais desempenho(sempre que altero o Forecolor e FillColor, o brush e a pen são recriados e selecionados... estou a pensar mudar isso e usar variáveis para pen e brush... assim só crio 1 vez.. apenas estou confuso devido ao brush\pen de origem ou anterior... deveria o guardar ou ignorar?)
agora tenho outro problema, por isso ontem criei o topico... queria resolver 1 bug gráfico 😞

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...