Jump to content
Fábio Costa

VB.Net OnPaint

Recommended Posts

Fábio Costa

Boas, estou a fazer um jogo em vb.net mas a aplicaçao para projecto final de um curso esta a ficar muito lenta.

estou a fazer um jogo plataforma, do tipo supermario 2d...

ja fiz o pac-man no ano passado mas nao ficou assim...

estou usando uma matriz que carrega o mapa em strings e depois uso a funçao OnPaint em que cada letra vai carregar uma imagem, e no decorrer do jogo so trabalho com strings.

Quero tornar a minha aplicaçao mais rapida mas nao sei como, ja procurei maneira de compilar sem passar pela framework mas nao encontro nada, perciso de uma soluçao.

Cumpts ...

Stilgar

Share this post


Link to post
Share on other sites
ribeiro55

Olá Fábio Costa

O máximo que podes fazer com GDI+ e WinForms é activar o DoubleBuffering do form, se dizes que já estás a dar instruções "OnPaint".


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
Fábio Costa

Este é o codigo do jogo ainda ta no inicio

Imports System.Media
Public Class Form1
    Dim mapa(30, 100) As Char
    Dim terminou As Boolean = False
    Dim direcao As New Point
    Dim boneco(7) As Point
    Dim andafrente As Boolean = False
    Dim salta As Byte = 0
    Private GraphicsBuffer As Graphics
    Private ImageAttributes As New Imaging.ImageAttributes
    Dim limmin As Byte = 0
    Dim limmax As Byte = 30
    Dim carregamapa As Byte = 0
    Dim carrega As Boolean = False
    Dim map As String = "pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p  78                                                                                              p" & _
"p  56                                                                                              p" & _
"p  34                                                                                              p" & _
"p  12                                                                                              p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"p                                                                                                  p" & _
"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp"
    Sub Carrega_Mapa()
        Dim x As Integer = 0
        For i As Integer = 0 To 29
            For j As Integer = 0 To 99
                If x <= map.Length - 1 Then
                    mapa(i, j) = map.Chars(x)
                    x += 1
                End If
            Next
        Next
    End Sub
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        While terminou = False
            Invalidate()
            'System.Threading.Thread.Sleep(100)
        End While
    End Sub
    Public Sub New()
        InitializeComponent()
        BackgroundWorker1.RunWorkerAsync()
    End Sub
    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim encontra_parede As Boolean = True
        If salta = 3 Then salta = 0
        If salta < 3 And salta <> 0 Then
            salta += 1
            direcao = New Point(-3, 0)
            If encontraparede() = True Then
                For i As Integer = 7 To 0 Step -1
                    mover(i + 1, i)
                Next
            End If
        End If
        Dim g As Graphics = e.Graphics
        For j As Integer = 0 To 29
            For i As Integer = limmin To limmax
                Select Case mapa(j, i)
                    Case "1"
                        g.DrawImage(My.Resources.b1, New Rectangle((15 * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                    Case "2"
                        g.DrawImage(My.Resources.b2, New Rectangle((carregamapa * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                    Case "3"
                        g.DrawImage(My.Resources.b3, New Rectangle((carregamapa * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                    Case "4"
                        g.DrawImage(My.Resources.b4, New Rectangle((carregamapa * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                    Case "5"
                        g.DrawImage(My.Resources.b5, New Rectangle((carregamapa * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                    Case "6"
                        g.DrawImage(My.Resources.b6, New Rectangle((carregamapa * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                    Case "7"
                        g.DrawImage(My.Resources.b7, New Rectangle((carregamapa * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                    Case "8"
                        g.DrawImage(My.Resources.b8, New Rectangle((carregamapa * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                    Case " "
                        g.DrawImage(My.Resources.Escuro, New Rectangle((carregamapa * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                    Case "p"
                        g.DrawImage(My.Resources.parede, New Rectangle((carregamapa * 12), (j * 12), 12, 12), 0, 0, 12, 12, GraphicsUnit.Pixel, ImageAttributes)
                End Select
                carregamapa += 1
            Next
            carregamapa = 0
        Next
        encontra_parede = True
        direcao = New Point(1, 0)
        If encontraparede() Then
            For i As Integer = 0 To 7
                mover(i + 1, i)
            Next
        End If
        MyBase.OnPaint(e)
    End Sub
    Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        Select Case e.KeyData
            Case Keys.Right
                direcao = New Point(0, 1)
                If encontraparede() = True Then
                    For i As Integer = 7 To 0 Step -1
                        mover(i + 1, i)
                    Next
                    andafrente = True
                    If limmax < 100 Then
                        limmax += 1
                        limmin += 1
                    End If
                End If
            Case Keys.Left
                direcao = New Point(0, -1)
                If encontraparede() = True Then
                    For i As Integer = 0 To 7
                        mover(i + 1, i)
                    Next
                    andafrente = False
                    If limmin > 0 Then
                        limmin -= 1
                        limmax -= 1
                    End If
                End If
            Case Keys.Up
                direcao = New Point(-1, 0)
                If encontraparede() = True And mapa(boneco(0).X + 1, boneco(0).Y) = "p" Then
                    For i As Integer = 7 To 0 Step -1
                        mover(i + 1, i)
                    Next
                    salta = 1
                    andafrente = False
                End If
        End Select
    End Sub



    


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        carrega_boneco()
        Carrega_Mapa()
    End Sub
    Sub carrega_boneco()
        boneco(0) = New Point(15, 3)
        boneco(1) = New Point(15, 4)
        boneco(2) = New Point(14, 3)
        boneco(3) = New Point(14, 4)
        boneco(4) = New Point(13, 3)
        boneco(5) = New Point(13, 4)
        boneco(6) = New Point(12, 3)
        boneco(7) = New Point(12, 4)
    End Sub
    Sub mover(ByVal x As String, ByVal i As Integer)
        x = mapa(boneco(i).X, boneco(i).Y)
        mapa(boneco(i).X, boneco(i).Y) = " "
        mapa(boneco(i).X + direcao.X, boneco(i).Y + direcao.Y) = x
        boneco(i) = New Point(boneco(i).X + direcao.X, boneco(i).Y + direcao.Y)
        x = ""
    End Sub
    Function encontraparede() As Boolean
        For i As Integer = 0 To 7
            If mapa(boneco(i).X + direcao.X, boneco(i).Y + direcao.Y) = "p" Then
                Return False
            End If
        Next
        Return True
    End Function
End Class

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.