Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

API, finne hvert punkt i en linje


Anbefalte innlegg

Hei,

 

Husker for lenge siden å ha lest om en API funksjon som returnerte alle punktene i en linje, som feks. tegnes med .Line-funksjonen, men nå finner jeg den ikke. Noen som vet navnet på denne?

 

Feks., punktene mellom 0.0 og 2.2 vil bli:

0.0
1.1
2.2

- Jonas

Lenke til kommentar
Videoannonse
Annonse

Hm, jeg er ikke kjent med noen slik API-funksjon, men hva med å simpelthen regne ut linjens koordinater selv? Her har du en simplifisert tegnefunksjon:

Public Sub DrawLine(Source As Form, ByVal X1 As Single, ByVal Y1 As Single, _

ByVal X2 As Single, ByVal Y2 As Single, ByVal Color As Long)

 

    Dim dX As Single, dY As Single, Lenght As Single, Tell As Long

       

    ' Kalkuler lengden på linjen (ved å benytte Pytagoras' setning)

    Lenght = Sqr(((X2 - X1) ^ 2) + ((Y2 - Y1) ^ 2))

   

    ' Regn ut endringen i X- og Y-aksen for hver piksel

    dX = (X2 - X1) / Lenght

    dY = (Y2 - Y1) / Lenght

   

    ' Tegn alle piksler

    For Tell = 0 To Lenght

       

        ' Tegn denne piksel

        Source.PSet (X1, Y1), Color

       

        ' Flytt til neste piksel

        X1 = X1 + dX

        Y1 = Y1 + dY

   

    Next

       

End Sub

Lenke til kommentar

Har støtt på et nytt problem. Dette er en del av et spill hvor man styrer slanger rundt i et brett, og slangene skal selvsagt ikke kollidere med hverandre. (Google - Zatacka)

 

Tingen er at jeg nå finner alle punktene til en linje, og jeg lagrer verdiene som True, som vil si at den delen av brettet er opptatt. Problemet oppstår da slangene er 5 pixel tykk, mens definisjonene i bakgrunnen kun er 1 px. Det resulterer i at slanger kan kjøre inni hverandre, men fortsatt ikke bli registrert som i kontakt med hverandre. I tillegg får jeg et annet problem, som jeg har prøvd å illustrere her, med to slanger som kjører igjennom hverandre.

 

post-20869-1164405020_thumb.jpg

 

Alt dette koker ned til; hvordan kan jeg finne alle punktene til en linje som er tykkere enn 1px? En løsning ville jo selvsagt hver å bruke GetPixel og bare faktisk sjekke om fargen ikke er svart, men det er jo så utrolig tregt. Eller finnes det kansje en bedre måte å gjøre det på?

 

Legger forresten med et vedlegg, for å vise hva jeg mener med "slanger". (Velg minimum to spillere og trykk space-knappen for å begynne)

 

(Igjen, bare rename *.txt til *.rar - forumet tillater egentlig ikke slike filtyper)

 

Edit: Nevermind, jeg fikk løst det ved å søke i et vist område rundt snaken's og sjekke siste posisjon om verdiene i arrayet var satt til true.

 

Edit: Har forøvrig lagt det ut her, http://www.zatacka.moo.no/

ZATACKA.txt

Endret av Jonas
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...