Winkel
Übersicht

![]() |
s_m_wBetreff: Winkel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich mache im moment ein kleines "Maus fussbalspiel" so in der Art, Man bewegt die Maus gegen den sich bewegenden ball um zu schießen, nur fliegt der ball nicht in die richtung in die ich will, das heißt, er prallt nicht richtig von der Maus ab. Ich habe so ziemlich keine Idee wie das mit WInkeln etc. geht, hätte da einer eine idee? |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau dir mal den Atan2 Befehl an oder suche mit der Forumsuche nach "CS 2D STeuerung", denn so kannst du den winkel zwischen Maus und Spieler rausfinden, zwischenspeichern, und mit Sinus&Friends den Ball in die gewünchte Richtung fliegen lassen.
EDIT: Habe das in einem alten Projekt gefunden, vllt. hilft es dir Code: [AUSKLAPPEN] winkel=(ATan2(y_pos ,x_pos)+270) Mod 360 If winkel>357 Then winkel=357 y_pos und x_pos sind die MouseKoordinaten. |
||
- Zuletzt bearbeitet von Chester am So, Feb 19, 2006 23:04, insgesamt 2-mal bearbeitet
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sowas nennt man im Übrigen "trigonometrische Funktionen". In diesem Fall ist die gesuchte Funktion der Tangens. (ql:atan2) | ||
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
ChEsTeR hat Folgendes geschrieben: Schau dir mal den Atan2 Befehl an oder suche mit der Forumsuche nach "CS 2D STeuerung", denn so kannst du den winkel zwischen Maus und Spieler rausfinden, zwischenspeichern, und mit Sinus&Friends den Ball in die gewünchte Richtung fliegen lassen.
EDIT: Habe das in einem alten Projekt gefunden, vllt. hilft es dir Code: [AUSKLAPPEN] winkel=(ATan2(y_pos ,x_pos)+270) Mod 360 If winkel>357 Then winkel=357 y_pos und x_pos sind die MouseKoordinaten. Das ergibt aber immer nur einen wert, und ich dachte ein winkel errechnet sich eher aus zwei punkten und nicht nur aus der Maus? ![]() |
||
![]() |
Iguan |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
das hilft dir vielleicht weiter: Code: [AUSKLAPPEN] Graphics 640,480,32,1 SetBuffer BackBuffer() Zx# = 320 Zy# = 240 Repeat Cls AbstandX# = Zx# - MouseX() AbstandY# = Zy# - MouseY() Winkel# = (ATan2#(AbstandX#,AbstandY#)+360) Mod 360 Color 255,255,255 Line 0,240,640,240 Line 320,0,320,480 Text MouseX(),MouseY(), Winkel# Color 255,0,0 Plot Zx#,Zy# Line 320,240,MouseX(),MouseY() Flip Until KeyHit(1) End wenn du den Winkel in dem Moment speicherst, wenn die Maus mit dem Ball kollidiert, dann kannst du nachher die Koordinaten des Balls so verändern: BallX# = BallX# + Cos(Winkel) BallY# = BallY# + Sin(Winkel) Musst halt ausprobieren, ob + oder - bzw. Cos oder Sin... Greundliche Füsse Iguan |
||
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was die 2 Punkte angeht: Dafür musst du als X Wert die Differenz der beiden X-Werte angeben und für die Y-Werte analog dazu. Ich hoffe, das hilft dir weiter.
War aber auch im Code von Iguan drin. Aber meistens hilft es nichts, wenn man einfach nur Code kopiert, ohne zu wissen, was er überhaupt bedeutet. |
||
- Zuletzt bearbeitet von HW am Mo, Feb 20, 2006 21:13, insgesamt einmal bearbeitet
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
s_m_w hat Folgendes geschrieben: ...
Das ergibt aber immer nur einen wert, und ich dachte ein winkel errechnet sich eher aus zwei punkten und nicht nur aus der Maus? ![]() Wie ich schon sagte, das habe ich in einem alten Projekt gefunden und habe praktisch keinen Durchblick mehr im Rest des Codes ![]() Aber schau dir mal das BSP. in der OH an, da ist das auch gut und verständlich dargestellt. EDIT: Hier ist es: Code: [AUSKLAPPEN] GRAPHICS 640,480,16,1 SETBUFFER BACKBUFFER() SEEDRND MILLISECS() DIM x(1),y(1),w(1),s(1) x(0)=RAND(0,639) y(0)=RAND(0,639) w(0)=RAND(0,359) s(0)=3 x(1)=RAND(0,639) y(1)=RAND(0,639) s(1)=2 WHILE KEYHIT(1)=0 COLOR 0,0,0 RECT 0,0,640,480 COLOR 255,255,255 w(0)=w(0)+RAND(-10,10) minx=x(0)-x(1) miny=y(0)-y(1) minx2=-(x(1)-640-x(0)) miny2=-(y(1)-480-y(0)) minx3=x(0)-640-x(1) miny3=y(0)-480-y(1) IF ABS(minx2)<ABS(minx) THEN minx=minx2 IF ABS(miny2)<ABS(miny) THEN miny=miny2 IF ABS(minx3)<ABS(minx) THEN minx=minx3 IF ABS(miny3)<ABS(miny) THEN miny=miny3 w(1)=ATAN2(miny,minx) FOR i=0 TO 1 x(i)=x(i)+COS(w(i))*s(i) y(i)=y(i)+SIN(w(i))*s(i) IF x(i)<0 THEN x(i)=640+x(i) IF x(i)>639 THEN x(i)=x(i)-640 IF y(i)<0 THEN y(i)=480+y(i) IF y(i)>479 THEN y(i)=y(i)-480 OVAL x(i)-5,y(i)-5,10,10,1 NEXT FLIP WEND WAITKEY() END |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group