Ja das mit Winkel hatte ich völlig übersehen.
Hab den code jetzt nochmal geändert, funktioniert auch, aber richtig gleichmässig sieht das nicht aus.
Der code ist jetzt komplett ausführbar.
soll eigentlich für ein vielfaches von 36 grad sorgen, um bei 10 kugeln die 360 grad zu erreichen.
wenn ich die kugelanzahl auf 20 erhöhe und dafür 18 grad nehme oder 5 kugeln und dafür 72 grad, dann sieht das sehr komisch aus.
Oder verstehe ich da was an den winkelfunktionen falsch?
Sin(winkel) und Cos(Winkel) sollte doch werte zwischen -1 und 1 ausgeben.
Aber wahrscheinlich habe ich da einen Denkfehler in der Umsetzung des Ganzen.
Code: Alles auswählen
; Wir muessen vorher noch etwas initialisieren, da wir ein Vollbild erstellen und dies braucht DirectX.
If InitSprite() = 0 ; Wenn wir die Sprite Funktion nicht initialisieren koennen,
MessageRequester("Fehler","Konnte dx nicht finden",0) ; wird ein Fehler gemeldet, der die moegliche Ursache ausgibt.
EndIf
If InitKeyboard()=0 ; Wenn wir die Keyboard Funktion nicht initialisieren koennen,
MessageRequester("Fehler","Konnte dx nicht finden",0) ; wird ein Fehler gemeldet, der die moegliche Ursache ausgibt.
EndIf ; Ende der Abfrage
; Jetzt wollen wir den Vollbild Modus erstellen.
If OpenWindow(0, 0, 0, 1024,768,"Windowed",#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget) = 0 ; Wenn "Oeffne ein Vollbild" aus ist,
MessageRequester("Fehler","Konnte kein Window erstellen ",0) ; wird eine Fehlermeldung ausgegeben.
EndIf
OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768)
;OpenScreen(640,480,32,"screen")
Procedure Events()
Define Event
; Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
If EventGadget() = 0
End
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
; Until Event = 0
EndProcedure
Procedure Release()
ExamineKeyboard() ; Keyboard aktualisieren
Events() ; Abfangen der WindowEvents
If KeyboardPushed(#PB_Key_Escape) ; Wenn die Taste Escape gedrueckt wird,
End ; wird das Programm beendet.
EndIf ; Ende der Abfrage
EndProcedure
Structure shoots
posx.f
posy.f
winkel.i
EndStructure
Global NewList shootliste.shoots()
ClearList(shootliste())
For a = 1 To 10
AddElement(shootliste())
shootliste()\posx = 500
shootliste()\posy = 350
shootliste()\winkel = a*36
Next
Repeat
ClearScreen(000000)
StartDrawing(ScreenOutput())
ForEach shootliste()
Circle(shootliste()\posx,shootliste()\posy, 10)
shootliste()\posx = shootliste()\posx + Cos(shootliste()\winkel)*1 ;1 = speed
shootliste()\posy = shootliste()\posy + Sin(shootliste()\winkel)*1 ;1 = speed
Next
StopDrawing()
FlipBuffers()
Release() ; eigene eventfunktion
ForEver
End