Winkel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

s_m_w

Betreff: Winkel

BeitragSo, Feb 19, 2006 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 19, 2006 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 19, 2006 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowas nennt man im Übrigen "trigonometrische Funktionen". In diesem Fall ist die gesuchte Funktion der Tangens. (ql:atan2)

s_m_w

BeitragMo, Feb 20, 2006 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Question

Iguan

BeitragMo, Feb 20, 2006 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 20, 2006 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 20, 2006 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Question


Wie ich schon sagte, das habe ich in einem alten Projekt gefunden und habe praktisch keinen Durchblick mehr im Rest des Codes Laughing

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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group