# Aim-Hilfe



## TheNewHerobrine (3. Jul 2014)

Ich arbeite gerade an einer Art 2D-Version von Portal (nur privat, also sollte keine Probleme mit Valve geben), und bin gerade dabei das Schießen von Portalen einzufügen.
Meine Frage ist, ob es einen einfachen Weg gibt eine Linie genau so lang zu machen bis sie einen Block trifft (also quasi wie eine Aim-Hilfe). Das würde schon reichen, welchen Block man dann trifft sollte so ja auch leicht herauszufinden sein.
Meine Idee wäre, dass man einfach solange testet ob das letzte Pixel der Linie einen Block trifft und dann die Linie um eins erweitert bis man halt einen Block trifft, aber ich bin mir nicht so sicher ob das wirklich die beste Möglichkeit ist.


----------



## eMmiE (3. Jul 2014)

Das kommt ganz darauf an, wie dus implementiert hast

Bei einem zweier Raster ist das relativ einfach
-> Kästchen, die von der Linie geschnitten werden abfragen

Bei "losen" Kästchen gibt es vllt noch einen anderen Weg, indem du einfach jede Linie zwischen zwei Punkten (jedes Kästchen besteht aus 4 Punkten) in einem Kästchen mit der Spielerposition verbindest, den Winkel zur (bsp.) y- Achse bestimmst und dann guckst, ob der Winkel der "Sichtgeraden" zwischen den Winkeln der beiden Punkte liegt (Anhang)

Gruß eMmiE


----------



## TheNewHerobrine (3. Jul 2014)

Danke für die schnelle Antwort.
Da ich ein einfaches Gitter hab (2D-Array) brauch ich wohl das mit den Winkeln nicht. Sollte ich am besten dann aber die Linie immer größer werden lassen (bzw. die Endkoordinaten immer weiter weg schieben) bis sie schließlich etwas trifft? Denn einfach nur wissen welche Kästchen geschnitten werden hilft wahrscheinlich nicht, denn ich muss auch wissen auf welche Seite gezielt wird (da soll ja dann ein Portal hin).
Ich werd mal versuchen das so irgendwie umzusetzen, vielleicht funktioniert es ja...


----------



## Gucky (3. Jul 2014)

Ich muss leider sagen, dass ich eMmiE nicht verstanden habe. 

Es gäbe auch noch die Möglichkeit, die Linie als ganzzahlige Vektorgrade zu beschreiben (also keine Brüche im Vektor sonst könnte es Probleme beim Runden geben. Es gibt nämlich keinen Pixel 134*26,7254).
Damit berechnest du dann z.B. jeden fünften Punkt und überprüfst, ob er sich in einem Block befindet. Dabei musst du sicherstellen, dass mindestens 6 Punkte zum Durchqueren eines Blockes benötigt werden.

Wenn du am Block angekommen bist, dann suchst du die geschnittenen Seiten und berechnest, welche am nächsten am Spieler ist.


----------



## eMmiE (6. Jul 2014)

Wenn du ein Raster hast, dann kannst du doch auch einfach einen "Schnellster Weg Algorithmus" benutzen, der dir den kürzesten Weg zu deinem Zielpunkt (setzt du fest! [Irgendwo am Rand]) berechnet und dir dann in der Reihenfolge, in der die Kästchen geschnitten werden, diese ausgibt. Dann guckst du einfach, welches von diesen Rasterkästchen tatsächlich gefüllt ist, und wenn dem so ist, dann schaust du einfach, wie das Rasterkästchen vor diesem von der Position her liegt (Bsp.: liegt es unterhalb deines Kästchens, wurde die untere Seite geschnitten ["Alles ist relativ"]) und dann weißt du wie und welches getroffen wurde

Gruß eMmiE

P.S.: Danke fürs Durchlesen


----------

