verschil tussen 2 locaties berekenen

Status
Niet open voor verdere reacties.

jordumus

Gebruiker
Lid geworden
20 okt 2008
Berichten
66
Hallo,

(nog maar eens ik :o )

Ik gebruik momenteel een map van 10x10 pictureboxen als 'map' tijdens een spel. Maar om te verplaatsen zou ik moeten kunnen berekenen of de pictureboxen wel tegen elkaar liggen. (je kan maar 1 vakje opschuiven ;) ) nu vroeg ik me af hoe dit enigzins kan...

Momenteel doe ik het volgende :

Code:
'vakje 1 is het vakje waar je eerst staat, vakje 2 is de nieuwe locatie, de vakjes zijn 70
'pixels hoog en breed en staan tegen elkaar, ik neem een marge van 2 pixels

If Math.Abs(vakje1.Location.X - Vakje2.Location.X) < 72 Or Math.Abs(vakje1.Location.Y - Vakje2.Location.Y) < 72 Then

'dit is om te zorgen dat je verplaatst, dit werkt
                oudmap = map(beurt - 1)
                map(beurt - 1) = nieuwmap
                Soort = 0
            Else
                txtuitleg.Text = "Je kan je niet naar hier verplaatsen!"
                Exit Sub
            End If

het probleem zit hem dus in de 'if'-regel, hij geeft niet juist door... ziet iemand mijn fout of moet ik dit anders oplossen?
 
Waarom maak je niet gewoon van de map een maparray(X,Y)
en dan picturebox 1,1 = maparray(1,1) enz.

suc6

Eerst en vooral: echt tof spel :D
Vervolgens: Het ligt waarschijnlijk aan mij maar ik snap de code niet echt. Ik veronderstel dat ik dit nodig zal hebben:

Code:
 Sub loadBricks()
        Dim xOffset As Integer = 75, yOffset As Integer = 100
        For row As Integer = 0 To brickRows
            For column As Integer = 0 To brickColumns

                brickArray(row, column) = New Rectangle( _
                xOffset, yOffset, brickWidth, brickHeight)

                xOffset += brickWidth + 10
                isBrickEnabled(row, column) = True
            Next
            yOffset += brickHeight + 10
            xOffset = 75
        Next
    End Sub

ik wil het toepassen op 100 vakjes van 70x70 (grootte) die TEGEN elkaar staan, in een veld van 10x10

Ik heb al eens gepuzzeld:

Code:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim xOffset As Integer = 0, yOffset As Integer = 0
        For row As Integer = 0 To 10
            For column As Integer = 0 To 10

                brickArray(row, column) = New Rectangle( _
                xOffset, yOffset, brickWidth, brickHeight)

                xOffset += brickWidth
                isBrickEnabled(row, column) = True
            Next
            yOffset += brickHeight
        Next
    End Sub

maar dit werkt niet helemaal.
Wat doe ik mis? En hoe stel ik dan de afbeeldingen in? Achteraf? Na deze sub gewoon overlopen? (en hoe werkt dat dan?)

bedankt alvast...
 
ff uit de losse hand geschreven dus weet niet of het 100% debugged is :P

Code:
sub loadlvl1()
        Dim xOffset As Integer = 0, yOffset As Integer = 0 'maak gewoon 2 integers als clocks
        For row As Integer = 0 To 10 'dit is een loop die van 1 naar 10 werkt dus eerst is row 1 dan 2 enz. en voert uit 
'er tussen de for en next staat.
            For column As Integer = 0 To 10 ' loop in een loop

                brickArray(row, column) = New Rectangle( xOffset, yOffset, brickWidth, brickHeight) 
'maakt / load een rectangle die je stopt in een array van rectangles :P
                xOffset += brickWidth 'zorgt dat hij naast dit vakje een nieuw vakje maakt zodat ze niet over elkaar gaan 
'liggen
                isBrickEnabled(row, column) = True 'is gewoon een array van value's 
            Next
           'what i added
            xOffset = 0 'restart xoffest
            yOffset += brickHeight 'doet een plaats naar beneden
        Next
    End Sub
Kleine fout :P je hebt xOffset = 0 vergeten waardoor het heel raar veld wordt.
En je kan het best met directX commands gaan werken als je echt een grote "Game" wil maken

En vergeet niet dat je Me.refresh function moet gebruiken om het scherm "Up te daten" anders kan je niks gaan zien.
 
Laatst bewerkt:
ff uit de losse hand geschreven dus weet niet of het 100% debugged is :P

Code:
sub loadlvl1()
        Dim xOffset As Integer = 0, yOffset As Integer = 0 'maak gewoon 2 integers als clocks
        For row As Integer = 0 To 10 'dit is een loop die van 1 naar 10 werkt dus eerst is row 1 dan 2 enz. en voert uit 
'er tussen de for en next staat.
            For column As Integer = 0 To 10 ' loop in een loop

                brickArray(row, column) = New Rectangle( xOffset, yOffset, brickWidth, brickHeight) 
'maakt / load een rectangle die je stopt in een array van rectangles :P
                xOffset += brickWidth 'zorgt dat hij naast dit vakje een nieuw vakje maakt zodat ze niet over elkaar gaan 
'liggen
                isBrickEnabled(row, column) = True 'is gewoon een array van value's 
            Next
           'what i added
            xOffset = 0 'restart xoffest
            yOffset += brickHeight 'doet een plaats naar beneden
        Next
    End Sub
Kleine fout :P je hebt xOffset = 0 vergeten waardoor het heel raar veld wordt.
En je kan het best met directX commands gaan werken als je echt een grote "Game" wil maken

En vergeet niet dat je Me.refresh function moet gebruiken om het scherm "Up te daten" anders kan je niks gaan zien.


Je hebt zo toevallig geen zin om even een privéles in directX te geven (ik heb al veel gezocht op internet maar nog nergens iets bruikbaars tegengekomen)
:o
 
nee niet echt de zin in :P maar er was wel een of ander boek, google het maar iets van:
.NET Game Programming with DirectX 9.0

Daar kan je het "leren" suc6

btw het is wel moeilijk
 
btw het is wel moeilijk

Meen je dat nu? Ik dacht nu eens iets makkelijks gevonden te hebben :shocked:
Ok, ontopic terug

ik denk dat ik het eerst nog met map zal doen en dan later zal overspringen naar directx ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan