Gjakmarrja Skrevet 21. oktober 2005 Del Skrevet 21. oktober 2005 Halloen.... Jeg holder på å mekke en julepacman sak.. mitt problem: Jeg bruker labels som vegger i spille... fant ut at det går an med enkel if kode som collition detection.. Hvordan kan jeg loope igjennom alle kontrollene i formen og liksom ligge konttrollen som har ordet Label i navnet inn i en array... for å så hente ut x og y senere.... Har prøvd men jeg klarer det ikke.... PLZ help me.. muchas gracis.. Lenke til kommentar
GeirGrusom Skrevet 22. oktober 2005 Del Skrevet 22. oktober 2005 (endret) C#: foreach(Control c in this.Controls) { if(c.GetType() == typeof(System.Windows.Forms.Label) { System.Drawing.Rectangle r = c.Bounds; // koden din her } } VB.NET: For Each c As Control In Me.Controls If c.GetType().Equals(GetType(System.Windows.Forms.Control)) Then Dim r As Rectangle = c.Bounds ' Koden din her End If Next Endret 22. oktober 2005 av GeirGrusom Lenke til kommentar
Gjakmarrja Skrevet 22. oktober 2005 Forfatter Del Skrevet 22. oktober 2005 takker... den delen funker... men et lite spørsmål til følgende kode: Private Function goleft(ByVal obj As Label) As Boolean On Error Resume Next Dim i As Integer Dim u As Integer = 1 Dim temp As Integer For i = 1 To vegg.vegg.LongLength - 1 ' Debug.WriteLine(i) ' Debug.WriteLine(vegg.vegg(i).Name) 'temp = vegg.vegg(i).Location.X If i = vegg.vegg.LongLength Then GoTo her ElseIf i = 0 Then GoTo her End If If vegg.vegg(i).Location.X + vegg.vegg(i).Width = obj.Location.X Then If obj.Location.Y > vegg.vegg(i).Location.Y + vegg.vegg(i).Height Then Return True Exit Function ElseIf obj.Location.Y + obj.Height < vegg.vegg(i).Location.Y Then Return True Exit Function End If Return False Exit Function End If her: Next End Function Den stopper som den skal i alt til venstre... viss jeg er on error resume next på toppen... tar jeg vekk den kommer det opp object referance not set to an instance of an objec elns får beklage koden ser helt JÆVLIG ut... jobber med det Lenke til kommentar
Manfred Skrevet 22. oktober 2005 Del Skrevet 22. oktober 2005 GoTo? *grøss og dobbeltgrøss* Lenke til kommentar
GeirGrusom Skrevet 24. oktober 2005 Del Skrevet 24. oktober 2005 Goto skal en kun bruke hvis en absolut må, dette er sjeldent, og her er det strengt tatt unødvendig. grunnen til at en ikke bruker goto, er fordi koden blir utrolig uoversiktelig. notater hvis du er interresert: Din goto helt fullstendig unødvendig, den vil aldri bli kalt, og i vil aldri bli lik 0 (som det blir sjekket etter) Du burde også bruke foreach istedet for vanlig for, for enkelhets skyld Collision detection burde være en egen funksjon Det er heller ikke nødvendig med Exit Function etter Return True, Exit Function burde compileren tagge som "unreachable code" Public Function DoDetect() As Boolean Dim i As Integer For i = 0 To vegg.Length - 1 If vegg.vegg(i).Bounds.Contains(obj.Location) Return True End If Next Return False End Sub Så enkelt kan det gjøres Lenke til kommentar
Gjakmarrja Skrevet 25. oktober 2005 Forfatter Del Skrevet 25. oktober 2005 Takker for koden.... MEN Jeg må prøve og utforske litt raskere grafikk kode, det hakket så jævlig... Spesielt når alle ghostene følger etter pacman... De bruker jo samme function for collition detection.... Du gidder vel ikke å ta en titt på visual basic roundup Link, greier og greier... Lenke til kommentar
GeirGrusom Skrevet 26. oktober 2005 Del Skrevet 26. oktober 2005 Bruk System.Drawing.Graphics istedet, tegn i Form.OnPaint Dropp labels, og slikt, det er tregt, pluss at det tar mye minne. eksempel på hvordan det kan gjøres(Jeg ville egentlig brukt interfaces, men husker ikke hvordan de ser ut i VB.NET): Public Class GameItem Protected m_loc As Point Protected m_size As Size Public Property Location As Point Get Return m_loc End Get Set(Value As Point) m_loc = Value End Set End Property Public Property Size As Size Get Return m_size End Get Set(value As Size) Return m_size End Set End Property Public Overridable Draw(System.Drawing.Graphics g) 'This function should be overriden End Sub End Class Public Class Wall Inherits GameItem Public Overrides Sub Draw(System.Drawing.Graphics g) g.DrawRectangle(0, 0, m_size.Width, m_size.Height) End Sub End Class Public Sub DrawAll(Items() As GameItem, g As System.Drawing.Graphics) 'Tegner alle i en array til et Graphics objekt Dim m As System.Drawing.Drawing2D.Matrix = g.Transform.Clone() For Each i As GameItem i Items ' Flytt objektet g.TranslateTransform(i.Location.X, i.Location.Y) i.Draw(g) g.Transform = m.Clone() Next End Sub 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å