Halbkreis per Script berechnen

  • Hi!


    Ich hab ein kleines Problem bei der Berechnung. In einem Scriptcall will ich für meinen Spieler eine bestimmte Sichtweite abfragen. In dieser Sichtweite will ich Objekte aufspühren. XY- Koordinaten sind für Spieler und Objekte vorhanden. Nun muss ich irgendwie abfragen, ob das Objekt in Reichweite ist. Die Berechnung für einen Kreis habe ich und funktioniert gut. Jedoch will ich nicht wissen, ob etwas hinter dem Spieler ist, sondern nur vorn.


    Hier mal zur Veranschaulichung:



    Hat jemand eine Idee wie man das abfragen könnte?


    Grüße von Kojote

  • Bewegen sich die Figuren denn pixelgenau oder würde auch eine tile-basierte Abfrage reichen? Dann würde ich abhängig von der Blickrichtung nämlich nur die sechs Tiles vor der Spielfigur abfragen.

    Ich benutze QMovement, aber leider bekomme ich keine genauen Pixelkoordinaten.


    Für die Kreisberechnung nutze ich derzeit diesen Call:



    Ich weiß nicht genau, wie du die Sache intern berechnest, aber ich würde wahrscheinlich zuerst versuchen abhängig der Blickrichtung der Figur Zielkoordinaten auszuschließen deren x- bzw. y-Wert größer bzw. kleiner als der betreffende Wert der Figur ist.

    Ich könnte es auch Kästchen für Kästchen abfragen, wäre zwar sehr präzise, jedoch auch extrem aufwendig. Ich müsste in Jede Richtung 9 Felder abfragen, macht 36 Abfragen.

  • Ich weiß nicht, ob ich den Code richtig lese (und ich muss natürlich raten, was hinter den Variablen steckt), aber ist das nicht bloß die Taxicab-Distanz und keine echte Kreisberechnung?



    Aber egal, wenn du Felder "hinter" der Figur ausschließen willst, musst du einfach deine If-Abfragen so abändern, dass bei bestimmten Blickrichtungen negative bzw positive Werte für die X- oder Y-Distanz dafür sorgen, dass die gesamte Abfrage misslingt. (Du also bspw. eine Gesamtdistanz erhältst, die garantiert außerhalb deiner Sichtweite liegt. Ich muss natürlich wieder raten, wie du die erhaltenen Werte weiterverwendest.)

  • Wenn die Abfrage nicht so genau sein muss, also wenn es reicht, dass die Tiles abgefragt werden, die in deinem Bild vom Halbkreis geschnitten werden, würde ich nur mit den X/Y-Koordinaten der Figur arbeiten.


    Zum Beispiel wenn die Spielfigur nach oben schaut, liegen die Tiles (Spielfigur_X - 1 bis Spielfigur_X +1) && (Spielfigur_Y - 2 bis Spielfigur_Y - 1) im Sichtbereich.

  • Ja, aber eben nur die Taxi-Distanz und nicht die Realdistanz. Du hättest also mehr eine Sichtraute als einen Sichtkreis. Was hier natürlich vermutlich komplett ausreicht.


    Was du jetzt, wie gesagt, tun müsstest, wäre die Blickrichtung der Figur mit einzubauen. Wenn du beispielsweise nach rechts schaust, sollten ja alle Felder links deiner Figur außerhalb deiner Sichtweite liegen. Ob ein Feld rechts, links, oberhalb oder unterhalb der Spielfigur liegt, siehst du daran ob deine entsprechende X- oder Y-Distanz (Variablen 43&44) positiv oder negativ ist. Du musst dann bloß noch ein wenig Code einfügen, der deine reale Distanz mit bspw. 99 überschreibt, wenn sich ein Feld im toten Winkel befindet.