2 Stimmen

Falscher Winkel beim Zeichnen eines Kreisausschnitts mit AS3

Für ein Flash-Spielprojekt, an dem ich arbeite, möchte ich eine Kamera erstellen, die mithilfe von Strahlverfolgung einen Spieler erkennen kann. Die Kamera sollte unterschiedliche Blickwinkel haben können (z. B. 45 Grad oder 90 Grad), und je nach diesen Blickwinkeln sollte sich die Strahlverfolgung ändern. Das Erstellen der tatsächlichen Blickwinkel mithilfe der Strahlverfolgung stellt kein Problem dar, jedoch sind aus irgendeinem Grund die Winkel, in denen sich diese Blickwinkel befinden, falsch positioniert.

Dies ist der Code, den ich verwende:

for (var i:Number = 0; i < this._viewAngle; i++)
{
    var pointX:Number = (this._viewRange) * Math.cos(this._viewAngle + (i * Math.PI / 180));
    var pointY:Number = (this._viewRange) * Math.sin(this._viewAngle + (i * Math.PI / 180));
    this._rayHolder.graphics.lineTo(pointX, pointY);
    this._rayHolder.graphics.moveTo(0, 0);
}

Und das ist das Ergebnis:
(90 Grad)

Kamera 90 Grad

(45 Grad)

Kamera 45 Grad

Ich hoffe, was ich geschrieben habe, war verständlich genug, da ich nicht weiß, wie ich es klarer erklären soll. Wenn jemand etwas Licht darauf werfen könnte, was ich hier falsch mache, wäre das großartig.

EDIT:
Ändern von Math.cos(this._viewAngle + (i * Math.PI / 180)); zu Math.cos((this._viewAngle + i) * Math.PI / 180); führt zu folgendem Ergebnis:

(90 Grad)

Kamera 90 Grad

(45 Grad)

Bildbeschreibung eingeben

4voto

David Mear Punkte 2254

Ich denke, du bist mit deinem Update nah dran. Wie Sunil D anmerkt, möchtest du vermutlich einfach den Sichtkegel zentrieren, sodass er bei 90 Grad von der Vertikalen aus zentriert ist. Mit anderen Worten, beginnend bei -_viewAngle * 0.5:

for (var i:Number = 0; i < this._viewAngle; i++)
{
    var pointX:Number = (this._viewRange) * Math.cos((-this._viewAngle * 0.5 + i) * Math.PI / 180);
    var pointY:Number = (this._viewRange) * Math.sin((-this._viewAngle * 0.5 + i) * Math.PI / 180);
    this._rayHolder.graphics.lineTo(pointX, pointY);
    this._rayHolder.graphics.moveTo(0, 0);
}

Bearbeitung: Während diese Gleichungen für diese Anwendung funktionieren, spiegeln die folgenden Flashs eigenartige Koordinatensysteme genauer wider. Speziell mit positivem x nach rechts, positivem y nach unten:

for (var i:Number = 0; i < this._viewAngle; i++)
{
    var pointX:Number = (this._viewRange) * Math.sin((90 - this._viewAngle * 0.5 + i) * Math.PI / 180);
    var pointY:Number = (this._viewRange) * -Math.cos((90 - this._viewAngle * 0.5 + i) * Math.PI / 180);
    graphics.lineTo(pointX + 100, pointY + 100);
    graphics.moveTo(100, 100);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X