Rect anhand von Winkel bewegen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bobo2040

Betreff: Rect anhand von Winkel bewegen

BeitragSa, Sep 28, 2013 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Very Happy
Ich habe ne Funktion die den Winkel des Gegners ausrechnet.. so und das Drehen des Schiffes um den Gegner klappt super... nur würde ich es gerne So machen das wenn ich Schieße der Laserschuss anhand des Winkels zum Gegner fliegt Also wenn ich z.b. da bin:

----------------
--[Ich]--------
----------------
[Gegner]-----

Dann soll der Schuss nach unten gehen... ich habe schon ein Bisschen rumprobiert aber das ist seeehhrrr umständlich mit mehreren Countern die Dann runterzählen und so das Rect bewegen ... aber das mit den Winkeln wohin sich das Rect bewegen muss muss ich alles einzeln machen und da blickt man nicht mehr so wirklich durch ... hättet ihr eine Idee ?
Ich hab mir gedacht da das Spieler Schiff immer in der Mitte ist kann man für den Start das machen:
BlitzBasic: [AUSKLAPPEN]

StartPosY=GraphicsWidht()/2
StartPosX=GraphicsHeight()/2
; Den Counter zum beenden des Fliegens
If ShootCounter>= 120 Then
ShootCounter=1
EndIf
; das Rect
Color 240,155,0
Rect ShootCounter-WinkelY,ShootCounter-WinkelX

; WinkelX / WinkelY sind mit Atan2()
; Nur ist das Problem das WinkelX/Y iwie fehl am platz ist..


Mfg

Xeres

Moderator

BeitragSa, Sep 28, 2013 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke, was du willst ist den Winkel von Quelle zum Ziel zu bestimmen (mit Atan2) und dann musst du die Koordinaten des Schuss nur damit verrechnen:
BlitzBasic: [AUSKLAPPEN]
winkel = ATan2(...)
x_speed = speed * Sin(winkel)
y_speed = speed * Cos(winkel)
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Bobo2040

BeitragSa, Sep 28, 2013 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay cool danke ich probiers gleich mal aus Wink
Habs nicht so mit mathe ^^

DAK

BeitragSa, Sep 28, 2013 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hatten wir nicht gerade so ziemlich die gleiche Frage (Winkel zwischen zwei Objekten finden) von dir hier mit (zwei mal!) ziemlich genau der gleichen Antwort?
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragMo, Sep 30, 2013 9:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein da wollte ich den Winkel für das Schiff haben... damit sich das dann immer zum Gegner dreht Wink
Und jetzt wollte ich das Der Laser zum Gegner immer vom Schiff aus fliegt Wink
Aber irgendwie klappt es nicht ... hab viel rumprobiert aber der Fliegt manchmal nach Links oder nach Rechts oder nach Oben/unten aber nur ganz selten da wo der Gegner steht...
BlitzBasic: [AUSKLAPPEN]

Function DrawLaser()
If AiLog=1 And AiHP>=1 Then
If ShowLaser=1 And AutoShoot=1 Then

; LaserX = (SpielerX+x_speed)-KameraX+45
; LaserY = (SpielerY-y_speed)-KameraY-25

If Laser1=1 Then
Color 140,255,255
ElseIf Laser2=1 Then
Color 205,51,51
ElseIf Laser3=1 Then
Color 0,0,205
EndIf

If speed>=120 Then
speed=1
EndIf
Print speed+" - "+y_speed+" - "+x_speed+" - "+Winkel
speed=speed+2
x_speed = speed * Sin(Winkel)
y_speed = speed * Cos(Winkel)

Rect GraphicsHeight()/2+x_speed,GraphicsWidth()/2+y_speed,20,50

EndIf
EndIf
End Function

DAK

BeitragMo, Sep 30, 2013 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm... Weißt du was Geschwindigkeit ist? Das ist nicht die Position des Objekts.

Willst du die Position haben, dann geht das so:

BlitzBasic: [AUSKLAPPEN]
x = x + xspeed
y = y + yspeed


Ich bitte dich, lass das MMO sein, und schau dir mal die Basics von 2D Vektorrechnung und Trigonometrie an, wie man es dir hier schon gefühlte hundert Mal geraten hat!
Gewinner der 6. und der 68. BlitzCodeCompo

Xeres

Moderator

BeitragMo, Sep 30, 2013 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@Bobo2040:
Du zeigst nicht, wie du Winkel berechnest oder wo er herkommt. Da kann es sich in der Funktion doch nur um lauter globale Variablen handeln. Dann ist die Funktion aber auch mehr oder weniger sinnlos...
Mein Ratschlag:
Kopiere den ganzen Code in eine neue Datei. Dann lösche alles weg, außer die Laser-Mechanik. Lasse vom Fenstermittelpunkt einen Laser zur Mausposition schießen. Dann lerne, wie man das ganze mit vielen Schüssen mit Types machen kann.
DANN kannst du deine Ergebnisse zurück in dein Spiel übertragen.

Wenn dir so kleine Teile nicht Flüssig von Hand gehen, musst du sie eben noch verstärkt üben. Dazu könnten dir Helfen:
Beginner's Practice Series: BPS #3: Verfolgungswahn, BPS #4: Vektoren, BPS #5: Seifenblasenmaschine.

Viel Erfolg.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group