Mein Problem ist noch immer noch das Gleiche
Dann
erklär es doch bitte mal!
Dein Code fügt pro Schleifendurchlauf ein neues Element rein, und wenn eins den Bildschirm verläßt (was keines tut, da SpeedX und SpeedY beide = 0 sind), würde er sie wieder aus der Liste entfernen. Passiert aber nie.
Das wird Dich ja nun sicherlich kaum überraschen, denn daß Du laufend Elemente hinzufügst, sie aber nicht löscht, wirst Du sicher selbst wissen.
Nun hast Du aber ein Spiel programmiert, und dort scheint es sich wohl um die Schüsse zu handeln. Diese werden auch in einer Liste verwaltet, aber doch rechtzeitig auch wieder gelöscht, wie ich sehe. Du hast ja sogar oben einen Bullet-Zähler, der irgendwann wieder auf 0 geht. Also kann es doch jetzt kein Problem mehr geben, oder nicht? Zumindest verstehe ich nicht, wo genau das Problem liegen soll, daher wäre es doch sinnvoll, wenn Du es einfach nochmal ein wenig genauer erläuterst. Im momentanen Code gibt es kein Problem, und da man es sowieso nie schafft, mehr als 10 Schüsse auf den Bildschirm zu bringen, kann es auch keine Performance-Probleme geben.
///
Ein Tip noch, hat jetzt nix mit dem eigentlichen Problem zu tun. Die "Clipping-Phasen" solltest Du nicht von hand definieren, das ist viel zu umständlich, sondern Du solltest die errechnen. Du hast ja einen Zähler namens ClippingPhase, den solltest Du ausnutzen. Ordne die Bilder in der Bitmap so an, daß sie alle im selben Raster sind (Deinem Code zufolge ist das leider nicht der Fall), und dann multipliziere ClippingPhase mit der Rasterbreite. Und fang bei x=0 an, und nicht bei x=12. Darüber hinaus ist es am besten, wenn Du die Bilder für "nach rechts laufen" alle in der ersten und die Bilder für "nach links laufen" alle in der zweiten Zeile hast (oder auch umgekehrt), weil Du dann auch die Variable für die Laufrichtung zur Berechnung nutzen kannst. Somit ersparst Du Dir hunderte von Zeilen, in denen Du mühselig von Hand alles berechnen mußt.
Hier mal ein Beispiel:

Es sind jetzt weniger Phasen wie bei Dir, aber das ist wurscht. Zudem wird bei uns die erste, dann die zweite, dann die erste, und dann die dritte angezeigt, aber das ist egal, stell Dir einfach vor, es wären pro Zeile 4 Figuren.
Der Code hierfür wäre dann z.B. sowas in der Art:
Code: Alles auswählen
#LEFT = 0
#RIGHT = 1
#UP = 2
#DOWN = 3
#DEATH = 4
#PLAYER_WIDTH = 20
#PLAYER_HEIGHT = 20
ClippingPhase = (ElapsedMilliSeconds() % 400) / 4
ClipX = ClippingPhase * #PLAYER_WIDTH
ClipY = Player\Direction * #PLAYER_HEIGHT
ClipSprite(Player\Sprite, ClipX, ClipY)
Deutlich kürzer, wie Du siehst

Wichtig ist halt nur, daß Du auch die Richtung irgendwo speicherst. Vielleicht willst Du lieber die Richtung für X und Y getrennt benutzen, kommt halt aufs Spiel drauf an, aber letztendlich ist das Prinzip das selbe. Immer schön alles rechnen, dafür hat man ja auch 'nen "Rechner"

Stell Dir nur mal vor, Du willst auf einmal größere Sprites verwenden. In meinem Fall genügt es, #PLAYER_WIDTH und #PLAYER_HEIGHT anzupassen, sodaß es mit den neuen Grafiken funktioniert. In Deinem Fall müßtest Du aber wieder von Hand die ganzen Werte ändern, was natürlich nicht nur mühsam, sondern auch fehleranfällig ist.