Wie lädt man ein Sprite?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

PB42 hat geschrieben:Gerne! Ich habe vor mir ein Tutorial namens Tutorial4 von Bluespeed. Der Pfad lautet:

C:\Dokumente und Einstellungen\Eigene Dateien\PureBasic\PB Tutorial

"PureBasic" ist in dem Pfad nicht das Programm PureBasic, sondern ein Ordner, wo dann wiederum Tutorials drin sind. Im Tutorial4 wird gezeigt, wie man ein Sprite lädt. (Denkste). Da steht dann nach der üblichen Programmeröffnung die Zeile

LoadSprite(0,"files\sprite.bmp",0)
Dein Tutorial heißt also zum Beispiel:

Code: Alles auswählen

C:\Dokumente und Einstellungen\Eigene Dateien\PureBasic\PB Tutorial\Tutorial_4.pb
Der Path "files\sprite.bmp" in LoadSprite ist ein relativer Path,
daß heißt er geht vom Ort der Quellcodedatei aus.

Das Bild für das Sprite muß also den folgenden Pfad haben:

Code: Alles auswählen

C:\Dokumente und Einstellungen\Eigene Dateien\PureBasic\PB Tutorial\files\sprite.bmp
Wenn Du dann den Ordner "PB Tutorials" komplett an eine
andere Stelle verschiebst, funktioniert der Code immernoch,
da Du mit einem relativem Pfad gearbeitet hast.

Relative Pfadangaben gehen vom aktuellen Verzeichniss aus,
und bei Doppelklick Deiner EXE ist das aktuelle Verzeichniss
gleichzeitig das Verzeichniss worin sich die EXE befindet.

Startest Du das Programm allerdings von der Console aus,
und Du bist dort nicht im gleichen Verzeichniss wie die EXE,
dann funktioniert das nicht mehr.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Das geht!!! Danke Daniel!!! :allright: :allright: :allright: Ich hab's gleich mehrmals ausprobiert, um das glauben zu können. Und hier ist der Code aus dem Tutorial ab der Stelle, wo ich das Bild eingefügt habe (wo das Programm nach der üblichen Einleitung losgeht):

Code: Alles auswählen

LoadSprite(0,"GFX\Fass1.bmp",0)                                ; Wir laden das Sprite (Bild).

[code]Repeat                                                  ; In der Schleife werden die ganzen Aktionen durchgefuehrt...
  FlipBuffers()                                         ; Wir flippen den Buffer.
  ClearScreen(255,0,0)                                  ; Wir "Saeubern" den Screen mit einer roten Farbe.
  ExamineKeyboard()                                     ; Um Keyboard Tasten funktionstuechtig zu machen, MUSS diese Funktion davor stehen.
  DisplaySprite(0,100,100)                              ; Wir zeichnen ein ganz normales Sprite.
  DisplayTransparentSprite(0,400,100)                   ; Wir zeichnen ein Sprite, das die Farbe schwarz als transparent anerkennt.
  If KeyboardPushed(#PB_Key_Escape)                     ; Wenn die Taste Escape gedrueckt wird,
    End                                                 ; wird das Programm beendet.
  EndIf                                                 ; Ende der Abfrage
ForEver   
[/code]

Wozu der Flipbuffer ist, weiß ich noch nicht, aber kommt deshalb das geladene Bild zweimal nebeneinander auf den Bildschirm?

PB42
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Für den Screen gibt es 2 Buffer. Einmal der Buffer, auf dem gerade ge-
zeichnet wird und einmal der Buffer, der gerade auf dem Screen an-
gezeigt wird. Mit FlipBuffer werden diese beiden Buffer vertauscht.

Das ganze verfolgt den Sinn, dass wenn du etwas zeichnest oder eine
Sprite anzeigst, dies nicht sofort passiert, sondern erst, wenn du den
Befehl ausführst. Damit wird das Flakern unterbunden.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

2 Sprites kommen vielleicht deswegen:

Code: Alles auswählen

DisplaySprite(0,100,100)                              ; Wir zeichnen ein ganz normales Sprite.
DisplayTransparentSprite(0,400,100)                   ; Wir zeichnen ein Sprite, das die Farbe schwarz als transparent anerkennt.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Das Bild wird übrigens zweimal dargestellt weil du es zweimal zeichnest, zwar mit unterschiedlichen Funktionen, aber das ist im Endeffekt unerheblich.

Code: Alles auswählen

  DisplaySprite(0,100,100)                              ; Wir zeichnen ein ganz normales Sprite. 
  DisplayTransparentSprite(0,400,100)                   ; Wir zeichnen ein Sprite, das die Farbe schwarz als transparent anerkennt.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Vielen Dank für für die Erklärung des Flipbuffers und überhaupt für alle Beiträge in diesem Thread!
PB42 :)
Antworten