Problem mit schussfunktion

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

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.
my pb stuff..
Bild..jedenfalls war das mal so.
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

ok ich versuchs mal ...danke :)

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 
danke nochmal <) :D
(nutze v. 3.3)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Um noch mal auf den ATAN() zurückzukommen :

Die Fallentscheidung ist sehrwohl wichtig, nur wurde hier die falschen fälle behandelt :oops:

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 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)
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
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@SG, du prüfst ob x=0 ja erst nach der division. ist das in PB3.3 so, dass es nur ein falsches ergebnis gibt, ohne mit div_by_zero abzubrechen?

und ForEach gibt's auch nicht? und var+1 zum inkrementieren geht auch nicht?
...interessiert mich nur mal.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

bei 3.3 macht er einfach weiter, OHNE ABBRUCH, nur halt mit einem falschen ergebnis :lol:

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
 
[/quote]
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
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

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.

Code: Alles auswählen

 Addshoot( player1\x+21*Cos(Player1\Neigung*#PI/180) , player1\y+7*Sin(Player1\Neigung*#PI/180),Player1\Neigung)
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
(nutze v. 3.3)
Benutzeravatar
tobe
Beiträge: 146
Registriert: 14.09.2006 17:33
Wohnort: Oktoberfest

Beitrag von tobe »

hi Ghost,

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)
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

... klappt leider auch nicht


sorry das die antwort so lange gedauert hat aber mein I-net war tod,
(nutze v. 3.3)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

tot

aber: der Tod
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

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.
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
Antworten