Problem mit schussfunktion
dann hättest du ja wieder 2 punkte -> 'ne linie.
ich mein das schiff selbst, also wenn du im spiel von oben drauf guckst und das schiff fliegt nach 4:00 uhr = 30° (je nach dem wie dein schiff rotiert...):
x=cos(30*#PI/180) * timer
....sin(...
<edit>
in dem letzten code ("..mit bullets..") wird der schuß-winkel bei zeile 57 gespeichert. das hochzählen findet in zeile 38f statt.
ich mein das schiff selbst, also wenn du im spiel von oben drauf guckst und das schiff fliegt nach 4:00 uhr = 30° (je nach dem wie dein schiff rotiert...):
x=cos(30*#PI/180) * timer
....sin(...
<edit>
in dem letzten code ("..mit bullets..") wird der schuß-winkel bei zeile 57 gespeichert. das hochzählen findet in zeile 38f statt.
ok ich versuchs mal ...danke
Edit
so habs jetzt (muss nur noch richtig einrücken)
danke nochmal


Edit
so habs jetzt (muss nur noch richtig einrücken)
Code: Alles auswählen
If KeyboardPushed(#Pb_Key_space)
AddLaserI(Playerx+16,Playery+16,5,5,al)
LaserI()\startx=Playery+16
LaserI()\starty=Playerx+16
EndIf
ResetList(LaserI())
While NextElement(LaserI())
DisplayTransparentSprite(2,LaserI()\x,LaserI()\y)
Wend
#PI = 3.14159265
ResetList(LaserI())
While NextElement(LaserI())
LaserI()\x= LaserI()\x + Cos(LaserI()\al*#PI/180) * LaserI()\timer
LaserI()\y= LaserI()\y + Sin(LaserI()\al*#PI/180) * LaserI()\timer
LaserI()\timer = 1
Wend


(nutze v. 3.3)
Um noch mal auf den ATAN() zurückzukommen :
Die Fallentscheidung ist sehrwohl wichtig, nur wurde hier die falschen fälle behandelt
Hier das richtige:
dx und dy sind wie immer die Differenzen aus den beiden Punkte.
dx = 0 muss überprüft werden (auch wenns unwahrscheinlich ist) weil bei dx/0 keine lösung rauskommt (unendlich)
Die Fallentscheidung ist sehrwohl wichtig, nur wurde hier die falschen fälle behandelt

Hier das richtige:
Code: Alles auswählen
#b = 3.14159265/180
Winkel.f = ATan(dy/dx)/#b
If dx < 0 : Winkel = Winkel + 180 : EndIf
If dx = 0 :
If (dy)< 0 : Winkel = -90 : EndIf
If (dy)>=0 : Winkel = 90 : EndIf
EndIf
dx = 0 muss überprüft werden (auch wenns unwahrscheinlich ist) weil bei dx/0 keine lösung rauskommt (unendlich)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
bei 3.3 macht er einfach weiter, OHNE ABBRUCH, nur halt mit einem falschen ergebnis
ForEach gibs nicht
a + 1 geht
Also hier dann der überarbeitete code
[/quote]

ForEach gibs nicht
a + 1 geht
Also hier dann der überarbeitete code
Code: Alles auswählen
b = 3.14159265/180
If dx = 0 :
If (dy)< 0 : Winkel = -90 : EndIf
If (dy)>=0 : Winkel = 90 : EndIf
Else
Winkel.f = ATan(dy/dx)/b
If dx < 0 : Winkel + 180 : EndIf
EndIf
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
hab schon wieder ein Problem mit der trigonometrie
Also ich binn jetzt ja soweit gekommen das sich das schiff drehen kann und in die richtung in der es geneigt ist schießen kann . Aber leider schiest es aus den cockbit und nicht aus den Waffen.
Wie kann man also den Startpunkt der geschosse zu ermitteln bezw. den aktuellen Punkt der waffen?
ich stell mal meinen gescheiterten Vrsuch rein.
der Syntax ist (x-position,yposition,Winkel)
das Sprite ist 32x32 Pixel groß
die waffe sitzt bei 0Grad an x=23,y=7
bei 270 grad (so wie es gezeichnet ist)
bei x=7, Y=4
Also ich binn jetzt ja soweit gekommen das sich das schiff drehen kann und in die richtung in der es geneigt ist schießen kann . Aber leider schiest es aus den cockbit und nicht aus den Waffen.
Wie kann man also den Startpunkt der geschosse zu ermitteln bezw. den aktuellen Punkt der waffen?
ich stell mal meinen gescheiterten Vrsuch rein.
Code: Alles auswählen
Addshoot( player1\x+21*Cos(Player1\Neigung*#PI/180) , player1\y+7*Sin(Player1\Neigung*#PI/180),Player1\Neigung)
das Sprite ist 32x32 Pixel groß
die waffe sitzt bei 0Grad an x=23,y=7
bei 270 grad (so wie es gezeichnet ist)
bei x=7, Y=4
(nutze v. 3.3)
hi Ghost,
ich geh mal davon aus das der drehpunkt des player1 bei 16,16 liegt,
dann glaube ich müsstete es so funktionieren:
ich geh mal davon aus das der drehpunkt des player1 bei 16,16 liegt,
dann glaube ich müsstete es so funktionieren:
Code: Alles auswählen
Addshoot( player1\x + Cos((player1\Neigung+30)*#PI/180)*10 , player1\y - Sin((player1\Neigung+30)*#PI/180)*10,player1\Neigung)
PureBasic 4.40 (Windows - x86)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
für uns als Programmiere sollte doch die Rechtschreibung egal sein oder ?
Ich sage nur:
Es gibt 10 Arten von Menschen. Die, die den Binärcode verstehen und die, die ihn nicht verstehen.
Ich sage nur:
Es gibt 10 Arten von Menschen. Die, die den Binärcode verstehen und die, die ihn nicht verstehen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr