Ein Bild: Mehrere schüsse auf dem Bilschirm?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Frusciante

Betreff: Ein Bild: Mehrere schüsse auf dem Bilschirm?

BeitragDo, Sep 01, 2005 23:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich bin unendlich froh das ich es geschaft habe ein Raumschiff auf den Bildschirm zu bringen das einen Schuss abfeuern kann, ohne Hilfe Smile)
Aber leider immer nur einen. Erst wenn der den Bildschirm verlassen hat kann ein neuer Schuss abgefeuert werden. Jetzt meine Frage:
Ist es möglich ein Bild nur einmal in den Speicher zu laden und es öffters auf dem Bildschrim auszugeben? Oder muss ich für jeden Schuss ein neues Bild laden und es unabhängig vom ersten Schuss auf den Bildschirm bringen?

mfg Frusciante²
 

Ava

Gast

BeitragFr, Sep 02, 2005 1:10
Antworten mit Zitat
Du kannst ein einziges geladenes Bild natürlich beliebig oft auf den Bildschirm malen. Du musst Dir dieses Bild wie eine Art Stempel vorstellen. Du hast diesen einen Stempel mit Deinem Bild, und jeder Aufruf von DrawImage stempelt das Bild auf die ausgewählte Zeichenfläche (Buffer). Dies kannst Du natürlich so oft tun wie Du möchtest, bevor Du das Bild dem Spieler zeigst (flip). Dein Stempel (Image) verbraucht sich dabei nicht! Smile

Also in der Praxis sieht das dann zb. so aus:BlitzBasic: [AUSKLAPPEN]
bild = LoadImage(\"bildname.bmp\")

Cls()

DrawImage bild, 200, 200
DrawImage bild, 200, 150
DrawImage bild, 250, 200
DrawImage bild, 300, 150
DrawImage bild, 250, 200

Flip()

Das Problem für Deinen nur einen Schuss liegt aber nicht darin, wie oft Du ein Bild zeichnen kannst, sondern das Du weisst, wie oft Du dieses Bild zeichnen musst (Anzahl zur Zeit sichtbarer Geschosse) und an welche Positionen (die Positionen der Geschosse).

Um dieses Problem zu lösen, solltest Du unbedingt mal einen Blick auf den Type-Befhel werfen!

Die meisten Anfänger scheuen zwar die Komplexität einer Type-Konstruktion und suchen sich andere Alternativen (zb. mit Arrays oder Dims), aber ich glaube, es bringt nur Vorteile, wenn Du Dir gar nicht erst so eine verkorste Alternative angewähnst!

Kleines Einstiegsbeispiel:BlitzBasic: [AUSKLAPPEN]
Graphics Graphics	640, 480, 16
SetBuffer BackBuffer()

Type t_schuss ; das ist Definition eines Schuss-Objektes!

Field x, y ; die Variablen, die jeder Schuss besitzt!

End Type


x = 64 ; Spieler-Position x
y = 240 ; Spieler-Position y


Repeat ; Hauptschleife beginnen

If KeyHit(57) Then neuerSchuss(x, y) ; neuen Schuss erstellen / mit Leertaste!
If KeyDown(200) y = y - 4 ; Spieler bewegen, hoch
If KeyDown(208) y = y + 4 ; Spieler bewegen, runter

bewegeSchuesse() ; alle Schüsse bewegen

Cls ; Bildschirm löschen
Color 255, 255, 255 ; Spielerfarbe einstellen
Oval x - 16, y - 16, 32, 32 ; Spieler zeichnen bewegen
zeichneSchuesse() ; alle Schüsse zeichnen
Flip ; Bildschirm zeigen

Until KeyHit(1) : End ; wiederholen bis ESC gedrückt wird



Function neuerSchuss(x, y) ; neuen Schuss erstellen

schuss.t_schuss = New t_schuss ; ein neues Schuss-Objekt erschaffen
schuss\x = x ; Schuss-Position x zuweisen
schuss\y = y ; Schuss-Position y zuweisen

End Function



Function bewegeSchuesse() ; alle Schüsse bewegen

For schuss.t_schuss = Each t_schuss ; alle Schüsse durchgehen
schuss\x = schuss\x + 4 ; Schuss bewegen
If schuss\x > 640 Then Delete schuss ; wenn Schuss links aus dem Bildschirm fliegt, löschen
Next

End Function



Function zeichneSchuesse() ; alle Schüsse zeichnen

anzahl = 0 ; gezählte Schüsse auf 0 setzen

Color 255, 0, 0 ; Schuss-Farbe einstellen

For schuss.t_schuss = Each t_schuss ; alle Schüsse durchgehen
anzahl = anzahl + 1 ; Schüsse zählen
Oval schuss\x - 4, schuss\y - 4, 8, 8 ; Schuss zeichnen
Next

Text 20, 20, \"Anzahl der Schüsse : \" + anzahl ; Anzahl der Schüsse anzeigen

End Function



Objekte sind toll! 8)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group