Seite 2 von 3
Verfasst: 09.08.2006 16:17
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.
Verfasst: 09.08.2006 16:35
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

Verfasst: 09.08.2006 21:14
von STARGÅTE
Um noch mal auf den ATAN() zurückzukommen :
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 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)
Verfasst: 10.08.2006 06:28
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.
Verfasst: 10.08.2006 17:05
von STARGÅTE
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
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]
Verfasst: 20.08.2006 11:29
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
Verfasst: 23.09.2006 01:08
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)
Verfasst: 12.10.2006 20:54
von Ghost
... klappt leider auch nicht
sorry das die antwort so lange gedauert hat aber mein I-net war tod,
Verfasst: 12.10.2006 21:38
von Kaeru Gaman
tot
aber: der Tod
Verfasst: 12.10.2006 23:03
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.