Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.08.2011, 17:47

Sprite einzelne Pixel entfernen

Hallo!
Mir fiel leider keine andere Überschrift ein um mein "Problem" zu spezifizieren.
Bei Space Invaders gibt es doch diese Schutzblöcke, die, bei einem Schuss, an der Stelle wo der Schuss einschlug, kaputt gehen, bis man schließlich, nach mehrmaligem drauf ballern, ganz durch ist.
Wie wurde das umgesetzt bzw. wie kann ich wo etwas umsetzen? Wie entfernt man einzelne Pixel, unkompliziert und nicht Performance-fressend?
Genutzt wird C++ und SFML. :P
Danke!

MfG
Check

2

27.08.2011, 18:13

Ich kenne das Spiel zwar nicht, aber ich würde sagen du nimmst einfach mehrere Sprites und machst nach ner Kollision einfach eins weg, bis am Ende keine mehr da sind.
Viel einfacher als an einem Sprite da rumzudoktern.^^

3

27.08.2011, 18:28

Das wären extrem viele für ein Objekt, das wäre ein sehr großer Aufwand. Deshalb dachte ich ja, es müsse einfacher gehen.

MfG
Check

Viktor

Alter Hase

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

4

27.08.2011, 19:07

Dein Sprite hat ne Methode getImage(). Die liefert dir das Image vom Sprite.
Auf das erworbene Image kannst du wieder eine Methode aufrufen namens setPixel(unit, uint, col).
Jetzt brauchst du da nur noch die Coords von dem Pixel, welches du löschen willst angeben,
eine Farbe mit alpha=0 und du bist fertig.
2 Minuten: google, Docu.

5

27.08.2011, 19:08

Cool danke!

MfG
Check

6

27.08.2011, 20:14

Die Funktion ist aber ziemlich langsam, wenn du da viele Pixel setzten musst, sind mehrere Sprites vllt. doch schneller.
Um wie viele Sprites würde es sich denn handeln?

Viktor

Alter Hase

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

7

27.08.2011, 20:23

Ich denke Aufwand und Nutzen stehen hier in keinem Verhältnis, wenn das denn überhaupt stimmt.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

8

27.08.2011, 20:37

Ich denke mal, das wurde damals meist mit einem Charset gemacht. Bau den Blocker also aus einzelnen Tiles zusammen, und wenn eines davon getroffen wird, wird das Tile mit einem leeren ausgetauscht.

9

27.08.2011, 20:40

Ich würde das in 2pxx1px Kästchen aufteilen. Und das wäre zu viel Arbeit für die Barrieren. - Unnütze Arbeit.
Mit der SetPixel-Funktion würde ich die Größe des Schusses plus ein paar Pixel darum herum umfärben, dann sieht es wie ein wirklicher Einschuss aus.
Eine dritte Variante die ich bei einem Flashgame gesehen habe:
Ich baue mir in etwa so etwas aus 32 Einzelbildern zusammen, um eine Barriere von 4 zu haben. Diese Einzelbilder haben dann eine Animation die das Objekt spröde erscheinen lässt. Das würde ich mit der guten alten Intelligenz (<-wollte was anderes nehmen, war jetzt zu faul den Satz umzuschreiben.) realisieren, eine Klasse für die kleinen Stücke und eine für eine Barriere. Eigentlich ein spezieller "Gegner" ohne Bewegung und Angriff.
Was wäre denn am schnellsten und könnte qualitativ gesehen die besten Leistungen bringen?

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

27.08.2011, 20:43

Ich kenne das Spiel zwar nicht

Oh mein Gott, bin ich der Einzige, der sich gerade so richtig alt fühlt, wenn er sowas liest? Space-Invaders unbekannt... :S

War SpaceInvaders ein TextMode Game?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige