Gjakmarrja Skrevet 30. oktober 2005 Del Skrevet 30. oktober 2005 (endret) Ja, holder på å lage en liten map editor sak.. mye igjen men det flikrer noe helt usundt. jeg ligger ved prosjektet som zip fil og koden direkte her på siden: Public x As Int64 Public y As Int64 Public farge As Color Public pennen As New Pen(farge.Lime, 1) Public penwall As New Pen(farge.Blue, 3) Public walls As New ListBox Public ontheway As Boolean = False Public pos1 As New System.Drawing.Point Public pos2 As New System.Drawing.Point Public mouseclick As Boolean = False Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick If mouseclick = True Then mouseclick = False If ontheway = False Then ontheway = True pos1.X = x pos1.Y = y ElseIf ontheway = True Then ontheway = False pos2.X = x pos2.Y = y addwall() End If End If redrawwalls() End Sub Public Sub tegn() 'draw the x line Me.CreateGraphics.Clear(farge.Black) Me.CreateGraphics.DrawLine(pennen, x, 0, x, Me.Height) 'draw the y line Me.CreateGraphics.DrawLine(pennen, 0, y, Me.Width, y) End Sub Public Sub redrawwalls() Dim i As Integer Dim temp() As String For i = 0 To walls.Items.Count - 1 temp = Split(walls.Items.Item(i), "|") Me.CreateGraphics.DrawLine(penwall, CInt(temp(0)), CInt(temp(1)), CInt(temp(2)), CInt(temp(3))) Next End Sub Public Sub addwall() 'save new wall to walls walls.Items.Add(pos1.X & "|" & pos1.Y & "|" & pos2.X & "|" & pos2.Y) End Sub Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove x = e.X y = e.Y tegn() End Sub Private Sub Form1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.GotFocus tegn() End Sub Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown If e.Button.Left = MouseButtons.Left Then mouseclick = True End If End Sub Det funker jo egentlig slik jeg ville men... flikringen var irriterende...? BTW VB 7.0 mini_map_sak.zip Endret 30. oktober 2005 av chills Lenke til kommentar
Gjakmarrja Skrevet 30. oktober 2005 Forfatter Del Skrevet 30. oktober 2005 Kom igjen då folkens... PLZ... det e sikkert veldig enkelt for dere som "know your stuff", men del det med meg. Lenke til kommentar
Moskus Skrevet 31. oktober 2005 Del Skrevet 31. oktober 2005 Som GeirGrusom sa i en annen post, bruk Paint Events for formen. Type: Private Sub frmMain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint e.Clear(farge.Black) 'Er ikke sikker på om denne faktisk trengs... 'Draw the x line e.DrawLine(pennen, x, 0, x, Me.Height) 'Draw the y line e.DrawLine(pennen, 0, y, Me.Width, y) 'Redrawing walls... Dim temp() As String For i = 0 as Integer To walls.Items.Count - 1 temp = Split(walls.Items.Item(i), "|") Me.CreateGraphics.DrawLine(penwall, CInt(temp(0)), CInt(temp(1)), CInt(temp(2)), CInt(temp(3))) Next End Sub Da bruker du bare e istedentfor Me.CreateGraphics. Istedenfor å kalle paint(), så kaller du Me.Invalidate. Lenke til kommentar
Gjakmarrja Skrevet 31. oktober 2005 Forfatter Del Skrevet 31. oktober 2005 Bare lurer moskus... lastet du ned prosjektet og testet den koden selv? For jeg klarer ikke å få det til å funke Lenke til kommentar
Moskus Skrevet 1. november 2005 Del Skrevet 1. november 2005 Nei, ikke testet før nå. I stedenfor kun e, så bruk e.graphics. Nå skal det fungere. Det flimrer fremdeles av en eller annen merkelig grunn... Lenke til kommentar
Moskus Skrevet 1. november 2005 Del Skrevet 1. november 2005 Måtte teste dette. Du kan se på koden, jeg har bygget den litt om og renset den for det jeg synes var unødvendig. La også til et par nye "features"... MiniMap_Rev_Moskus_1.zip Lenke til kommentar
Gjakmarrja Skrevet 1. november 2005 Forfatter Del Skrevet 1. november 2005 (endret) Takk så mye... Skal teste det så snart jeg kommer hjem fra skolen EDIT: Takker så mye.... testa den og funka perfect... Men flimringen kan det komme av at jeg bruker split string function saken.. er ikke den litt for treg til dette? Endret 1. november 2005 av chills Lenke til kommentar
Moskus Skrevet 2. november 2005 Del Skrevet 2. november 2005 Det er mulig at split-funksjonen er treig. Det enkleste er jo bare å bytte ut split'en med en to-dimensjonal array. Hvis du lagrer denne arrayen (i en tabell) i et dataset er det veldig enkelt å åpne og lagre den som XML. Lenke til kommentar
Moskus Skrevet 2. november 2005 Del Skrevet 2. november 2005 Det er jo selvfølgelig doublebuffer som mangler... Legg til dette i frmMain_Load sub'en: Me.SetStyle(ControlStyles.ResizeRedraw, True) Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.DoubleBuffer, True) (der ControlStyles.DoubleBuffer er den viktigste...) Lenke til kommentar
Gjakmarrja Skrevet 2. november 2005 Forfatter Del Skrevet 2. november 2005 Tusen tusen takk for all hjelpen.. Jepp funker HELT RÅTT NÅ... Jeg bruker samme grafikk kode til å lage alle nye 2d spill fantasien min skulle komme opp med Lenke til kommentar
Moskus Skrevet 2. november 2005 Del Skrevet 2. november 2005 Bare hyggelig! Jeg bruker samme grafikk kode til å lage alle nye 2d spill fantasien min skulle komme opp med Så vi kan forvente oss en haug med Pacman-kloner i nærmeste fremtid? Lenke til kommentar
Gjakmarrja Skrevet 2. november 2005 Forfatter Del Skrevet 2. november 2005 Bare hyggelig! Jeg bruker samme grafikk kode til å lage alle nye 2d spill fantasien min skulle komme opp med Så vi kan forvente oss en haug med Pacman-kloner i nærmeste fremtid? 5093882[/snapback] Nja... for se.. men du bare lurer på et par nye ting... Hva gjør jeg viss jeg vil bruke bitmaps som vegger og bakgrunn i stede for drawline...? Men ja.. eg må prøve og lage en pacman klone.. alle som programmerer har vel det :!: Lenke til kommentar
Moskus Skrevet 2. november 2005 Del Skrevet 2. november 2005 Bitmap som bakgrunn er jo enklest løst ved å sette et bilde som bakgrunn på formen ( Me.BackgroundImage = New Bitmap("test.jpg")). Ved bruk av Bitmap som texture er jeg ikke sikker, men du kan nok bruke en TextureBrush til å tegne med. Dim br as New TextureBrush(Image.FromFile("greenstone")) og tegne med den... eller så kan du jo alltids tegne selve bildet... e.Graphics.DrawImage(Image.FromFile("test.jpg"), New Point(x, y)) Lenke til kommentar
Gjakmarrja Skrevet 2. november 2005 Forfatter Del Skrevet 2. november 2005 (endret) Thancz igjen Hvordan anvender jeg textbrush saken? Endret 2. november 2005 av chills Lenke til kommentar
GeirGrusom Skrevet 2. november 2005 Del Skrevet 2. november 2005 TextureBrush er et objekt som inheriter fra Brush, for å tegne en TextureBrush må du bruke en rektangel, eller lignende, i Graphics.DrawRectangle(Brush, ...) Det er enklere å bruke Graphics.DrawImageUnscaled(Image, ...) og bare laste bildet i et Image objekt eksempel: Private bgImg As Image = System.Drawing.Bitmap.FromFile("test.jpg") Protected Override Sub OnPaint(sender As Object, e As PaintEventArgs) e.Graphics.DrawImageUnscaled(bgImage, pctDisp.Bounds) End Sub Hvis du bruker TextureBrush kan du fylle et polygon, eller sirkel etc. med en tekstur eksempel: Private bgImg As Image Private m_fill As System.Drawing.Drawing2D.TextureBrush Private m_poly() As Point Public Sub New() bgImg = New System.Drawing.Bitmap.FromFile("test.jpg") m_fill = New System.Drawing.Drawing2D.TextureBrush(bgImg) m_poly = New Point() { _ New Point(32, 32), _ New Point(79, 16), _ New Point(64, 96)} End Sub Protected Override Sub OnPaint(sender As Object, e As PaintEventArgs) e.Graphics.FillPolygon(m_fill, m_poly); e.Graphics.DrawPolygon(System.Drawing.Pens.Black, m_poly); End Sub En god grunn til aldri å bruke CreateGraphics(), er fordi det er en funksjon, ikke et objekt, den lager et Graphics objekt hver gang du kaller den. Lenke til kommentar
Gjakmarrja Skrevet 2. november 2005 Forfatter Del Skrevet 2. november 2005 Du... Hva er den subben med public sub new end sub forklaring så e du snill Lenke til kommentar
GeirGrusom Skrevet 2. november 2005 Del Skrevet 2. november 2005 Sub New() er det man kaller en constructor En constructor har til hensikt å initialisere et objekt med en gang det blir laget, og kanskje gi parameter f.eks. Public Structure MyPlayer Protected m_name As String Protected m_location As Point Public Sub New(playername As String) m_name = playername m_location = new Point(32, 32) End Sub Public Property Name() As String Get Return m_name End Get Set(value As String) m_name = value End Set End Property End Structure Public Sub Main() Dim a As Player a = New Player("Pacman") Console.WriteLine(a.Name) End Sub Det finnes også noe som heter destructor, denne heter Protected Sub Finalize() Den tar aldri noen parameter, men IDisposable brukes til fordel for Finalize. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå