Hi!
Ich habe ein Problem mit meiner Lichtkegel Berechnung.
Es geht um Kreise und Winkel.
Es ist wie folgt:
(http://img509.imageshack.us/img509/228/bitmapyg0.png)
Man stelle sich geistig einen Kreis vor, der um den quadratischen Spieler Sprite gezogen wird. Am Rand dieses Kreises soll nun die Spitze des Lichtkegels liegen, egal um welchen Winkel sie gerade gedreht ist. (Ich benutze Rotosprite, aber da wird der Kegel immer um den Mittelpunkt gedreht.) Das Bild meines Lichtkegels ist nicht quadratisch.
Wenn Du's einfach willst, mach das Sprite größer, so dass der Mittelpunkt da ist, wo auch der Mittelpunkt des spielers wäre. Sonst musst Du das Sprite auch noch mitverschieben.
Dann wäre die Spitze des Lichtkegels im Mittelpunkt des Spielers.
Ich wollte eigentlich mit Sinus und CoSinus arbeiten, aber ich weiß nicht wie ich sie dafür korrekt benutze.
x = xm + cos(phi)*r
y = ym - sin(phi)*r
xm,ym = Mittelpunkt, Spieler
r = Radius des Kreises
phi = Winkel des Lichtes. 0->, 90^, 180 <-, 270v
Danke, hab es ausprobiert, funktioniert aber nicht ganz :o
Er sollte sich erstmal um die Spitze drehen können, den reste könnte ich machen.
x,y=Mittelpunkt, Spieler
WinkelPhi=ein Winkel für Starte+Ende
KugelRadiusStarte =50 //Starte LichtX/LichtY, 50 ist weit genug hier?
KugelRadiusEnde =100+KugelRadius //Ende, 100+50 ist weit genug hier?
LichtX=x+KugelRadiusStarte*COS(WinkelPhi)
LichtY=y+KugelRadiusStarte*SIN(WinkelPhi)
EndeLichtX=x+KugelRadiusEnde*COS(WinkelPhi)
EndeLichtY=y+KugelRadiusEnde*SIN(WinkelPhi)
X_SPOT_LT 0, LichtX,0,LichtY,EndeLichtX,0,EndeLichtY,45(?)
Quote from: Hemlos on 2008-Nov-10
x,y=Mittelpunkt, Spieler
WinkelPhi=ein Winkel für Starte+Ende
KugelRadiusStarte =50 //Starte LichtX/LichtY, 50 ist weit genug hier?
KugelRadiusEnde =100+KugelRadius //Ende, 100+50 ist weit genug hier?
LichtX=x+KugelRadiusStarte*COS(WinkelPhi)
LichtY=y+KugelRadiusStarte*SIN(WinkelPhi)
EndeLichtX=x+KugelRadiusEnde*COS(WinkelPhi)
EndeLichtY=y+KugelRadiusEnde*SIN(WinkelPhi)
X_SPOT_LT 0, LichtX,0,LichtY,EndeLichtX,0,EndeLichtY,45(?)
Thank you, but sadly I need it for 2D, I used ROTOSPRITE. :o
Now, if I think about it I come to the conclusion, that I should use a POLYVECTOR for my function :D
Dankeschön, aber leider brauche ich es für 2D, ich habe ROTOSPRITE benutzt. :o
Wenn ich darüber nachdenke, komme ich zu dem Entschluss das ich wohl einen POLYVECTOR benutzen sollte :D
GETFONTSIZE fx,fy
SETTRANSPARENCY 0
PRINT "<",0,0
GRABSPRITE 0,0,0,fx,fy
BLACKSCREEN
STRETCHSPRITE 0,0,0,128,128
GRABSPRITE 0,0,0,128,128
WHILE TRUE
INC phi, 2
MOUSESTATE xm, ym, b1, b2
DRAWRECT xm-32, ym-32, 64,64, RGB(255,0,0)
// light
GETSPRITESIZE 0, sx, sy
r = sx/2 + 32 // size of light + half size of player
x = xm + COS(phi)*r
y = ym - SIN(phi)*r
ROTOSPRITE 0, x-sx/2, y-sy/2, phi
SHOWSCREEN
WEND
Quote from: S. P. Gardebiter on 2008-Nov-10
Thank you, but sadly I need it for 2D, I used ROTOSPRITE. :o
Mathematik ist die gleiche, Math is the same.
Quote
Now, if I think about it I come to the conclusion, that I should use a POLYVECTOR for my function :D
gute Idee :good:
Quote from: Kitty Hello on 2008-Nov-11
GETFONTSIZE fx,fy
SETTRANSPARENCY 0
PRINT "<",0,0
GRABSPRITE 0,0,0,fx,fy
BLACKSCREEN
STRETCHSPRITE 0,0,0,128,128
GRABSPRITE 0,0,0,128,128
WHILE TRUE
INC phi, 2
MOUSESTATE xm, ym, b1, b2
DRAWRECT xm-32, ym-32, 64,64, RGB(255,0,0)
// light
GETSPRITESIZE 0, sx, sy
r = sx/2 + 32 // size of light + half size of player
x = xm + COS(phi)*r
y = ym - SIN(phi)*r
ROTOSPRITE 0, x-sx/2, y-sy/2, phi
SHOWSCREEN
WEND
Thanks Gernot. I will save that if I need it again.
I'm doing it with a polyvector now and it works. :o