Kollisionen?



  • Hallo,

    Ich benutze zurzeit SFML und versuche damitmein erstes (zweites?, hab ein kleines Schach geschrieben) zu schreiben.

    Anfangs möchte ich einfach einen Spieler haben, der bewegt werden kann und nicht durch andere Sprites laufen kann.

    Nun kommt mein Problem: Wie kann ich Kollisionen entdecken???

    Ich hab mir zwei Wege überlegt (Ich werde anfangs bloss viereckige sprites verwenden!):

    - Ich speichere alle meine Objekte, die ich in meinem Spiel anzeige in ein Vector und iteriere bei jedem Movement durch diese Objekte und gucke, ob mein Spieler in eins dieser Objekte reinlaufen würde nach dem Movement.

    - Ich mache mir ein Pixelarray mit allen Pixeln und jedesmal wenn ich ein neues Objekt erzeuge (oder eines bewege), die belegten Pixel in meinem Array markiere.

    Wie ihr seht sind beide Wege total idiotisch und können gar nicht zum Ziel führen xD.

    Köpnntet ihr mir vielleicht mit einer Idee weiterhelfen?

    Danke

    EDIT:

    Ausserdem ist mir eine andere Frage aufgekommen:

    Bei meinem Schachspiel, mache ich es so, dass mein Spielfeld ein Array ist, daher kann ich leicht herausfinden, wann der User welche Figur anklickt, doch wie würde ich das mit allgemeinen Objekten in meinem Fenster machen?



  • Also es ist schon richtig das Du vor jedem anzeigen deiner Bilder auf Kollisionen testen mußt.
    Die erste Möglichkeit mit den sogenannten Bounding boxen macht die Berechnugen natürlcih leichter aber Du hast dann keine Pixelgenaue Kollisions erkennung.
    Was nicht so genau ist... Du kannst aber auch auf Kreise oder Elipsen verwenden
    Verwendest Du Rechtecke und sind diese nicht rotiert kannst du einfach die x und y koordinaten abgleichen.
    Wenn Du die aber rotierst musst du schauen ob sich die Geraden des rechtecks mit anderen Geraden schneiden.
    Hier findest Du z.B eine kleine Anleitung dazu:

    http://www.scherfgen-software.net/index.php?action=tutorials

    Du brauchst ja vielleicht auch nicht alle Objekte gegeneinander zu prüfen. So habe ich z.B. nicht alle in einem Vector sondern einen 2 dimensionalen Vektor gemacht der mir die Objekte in Verschiedenen Schichten organisiert. So habe ich z.B. Schichten die ohne Kollisionserkennung auskommen(z.B. Hintergrundbild....)

    Für die Pixelgenaue Kollsionserkennung gibt es auch eine Menge Tutorials...
    Google hilf hier

    Zu deiner Idee: Du kannst das spielfeld natürlich auch Rastern und deine Spielfiguren nur von einem Feld ins nächste ziehen...dann kannst Du die kollisionserkennung auch über einen Array machen!

    Beste Grüße,
    muli



  • Pixelgenaue Kollisionserkennung ist sowieso Kacke.


Anmelden zum Antworten