Image zeichnen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Image zeichnen

Beitrag von MASH »

Ich wollte mal wissen wie ich ein Bild zeichenen kann so das es nicht veil speicher wegnimmt aber schnell geladen wird. Dieses Bild liegt in bmp format in der größe 800x600x32 vor. nach einem Tastendruck soll das nöächste kommen. Mein Problem ist wie ich es zeichne habe schon das versucht:

Code: Alles auswählen

OpenScreen(640, 480, 16, "Sprite")
  LoadImage(1,"graphics\Image_01.bmp")
  
  StartDrawing(ImageOutput())
  DrawImage(1,10,10)
Aber ich komme einfach nicht weiter.

Danke Mark S.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

EIN GRATIS TIPP: mach das image in png format :allright:
nocheiner: verwände doch sprites, wenn du sowso nen openscreen hast :allright:

Code: Alles auswählen

initsprite()
initkeyboard()
openscreen(800,600,32,"")
loadsprite(0,"Pfad$")
"
"
"
" ; hier kommen alle deine bilder geladen

Bild = 0

repeat

if bild = 0
displaysürite(bild,0,0)
elseif bild = 1
displaysprite(bild,0,0)
;usw
endif

if keyboardreleased(#pb_key_all)
bild = bild + 1
endif



examinkeyboard()
until keyboardpushed(#pb_key_escape)
end


probiers mal so.
ich weis nicht obs geht, und du musst halt evt. fehler ausbessern, da ich den code nicht im editor geschrieben habe :lol:

aber ist es das was du meinst?
-.-"
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

examine[/e]keyboard heißt das
und flipbuffers() vergessen
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Beitrag von MASH »

Bei deisem CODE hat der Debugger gesgt das er das sprite nicht inintialisiert hat ich dachte das würde mit "InitSprite() " passieren! EDIT: Wo muss den diese Funktion hin FlipBuffers() ??

Code: Alles auswählen

InitSprite() 
InitKeyboard() 
OpenScreen(800,600,32,"") 
LoadSprite(0,"graphics\Image_01.png") 
LoadSprite(1,"graphics\Image_02.png") 
LoadSprite(2,"graphics\Image_03.png") 
LoadSprite(3,"graphics\Image_04.png") 
bild = 0 


Repeat 
	If bild = 0 
		displaysprite(bild,0,0) 
	ElseIf bild = 1 
		DisplaySprite(bild,0,0) 
	EndIf 

	If KeyboardReleased(#pb_key_all) 
	bild = bild + 1 
	EndIf 

	ExamineKeyboard() 
Until KeyboardPushed(#pb_key_escape) 

End 
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

also warte mal....
so gehört er

MASH hat geschrieben:Bei deisem CODE hat der Debugger gesgt das er das
sprite nicht inintialisiert hat ich dachte das würde mit "InitSprite() " passieren! EDIT: Wo muss den diese Funktion hin FlipBuffers() ??

Code: Alles auswählen

InitSprite() 
InitKeyboard() 
usepngimagedecoder()
OpenScreen(800,600,32,"") 
LoadSprite(0,"graphics\Image_01.png") 
LoadSprite(1,"graphics\Image_02.png") 
LoadSprite(2,"graphics\Image_03.png") 
LoadSprite(3,"graphics\Image_04.png") 
bild = 0 


Repeat 
	If bild = 0 
		displaysprite(0,50,10)
	ElseIf bild = 1                      
		DisplaySprite(1,50,10) 
	EndIf 

	If KeyboardReleased(#pb_key_all) 
	bild = bild + 1 
	EndIf 

	ExamineKeyboard() 
        flipbuffers()
Until KeyboardPushed(#pb_key_escape) 

End 
guck mal hier

Code: Alles auswählen

LoadSprite(0,"graphics\Image_01.png") 
LoadSprite(1,"graphics\Image_02.png") 
LoadSprite(2,"graphics\Image_03.png") 
LoadSprite(3,"graphics\Image_04.png") 
da gibst du ihnen beim ersten parameter eine ID, diese ID muss hier statt Bild rein:

Code: Alles auswählen

displaysprite(0,50,10)
50 ist die X position und 10 die Y, um das bild an einer andren stelle anzuzeigen musst du die positionen verändern.

außerdem hab ich noch den pngimagedecoder() rein... damit du png verwenden kannst

mach lieber mal ein tutorial, auf purearea.net findest du welche
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

MASH hat geschrieben:Wo muss den diese Funktion hin FlipBuffers() ??
Alle Zeichenoperationen, wie Bildschirm löschen (Clearscreen), Sprites darstellen (DisplaySprite) oder andere Zeichenbefehle (StartDrawing) werden auf einem "versteckten" Bildschirm ausgeführt. Hat man alles fertig gezeichnet, kann man den versteckten Bildschirm mit dem Befehl "FlipBuffers()" auf den Monitor holen. So wird das Bild in einem Rutsch aktualisiert und man sieht die einzelnen Schritte beim Aufbauen der Grafik nicht. Deshalb muss nach allen Grafikoperationen am Schluss immer ein FlipBuffers() stehen.

Code: Alles auswählen

;1) Initialisieren

InitSprite()
InitKeyboard()

;2) Bildschirm öffnen:

OpenScreen(800,600,32,"")

;3) Sprites laden:

UsePNGImageDecoder()

LoadSprite(0,"graphics\Image_01.png")
LoadSprite(1,"graphics\Image_02.png")
LoadSprite(2,"graphics\Image_03.png")
LoadSprite(3,"graphics\Image_04.png") 

;4) Hauptschleife, wird beendet mit ESC

;---------------------------------------------------
Repeat
;---------------------------------------------------

  ;Tastatur aktualisieren, bevor irgendeine Taste geprüft wird
  ;*************************************************

  ExamineKeyboard()

  ;Ausgabe der Sprites (Alle Zeichenbefehle werden
  ;auf einem "versteckten" Bildschirm ausgeführt!!)
  ;*************************************************

  ClearScreen(0, 0, 0)

  DisplaySprite(0, 000, 000)
  DisplaySprite(1, 120, 300)
  DisplaySprite(2, 320, 500)

  ;Wenn alles gezeichnet, den "versteckten" Bildschirm
  ;nach vorn holen, erst jetzt werden die Sprites sichtbar.
  ;*************************************************

  FlipBuffers()

;---------------------------------------------------
Until KeyboardPushed(#PB_Key_Escape) 
;---------------------------------------------------
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

@Rubiko

ich weis... tut mir leid, war müde und musste noch lernen, war ein wunder das ich überhaupt noch an den computer durfte, also nicht böse sein :allright:

und wie gesagt, habe den code nicht getestet
-.-"
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Beitrag von MASH »

NEIN bin ich nicht aber ich habe es wenigstens nachvolziehen könnenen. Ein bisschen kenne ich mich ja auch schon auch mein erstes programm habe ich schon geschrieben. Und jetzt wollte ich mein erstes Spiel bauen.

Danke für die ganzen Scripts

EDIT1: Wenn ich text anzeigen möchte dann muss ich den doch auf

Code: Alles auswählen

ScreenOutput()
anzeigen. Oder???

EDIT2: Der Text wird aber mit der Hintergrundfarbe weis angezeigt und nich tranzparent wie bekomme ich dieses hin?

EDIT3: Hat sich schon erledigt villeicht sollte ich wirklich mal vorher in die Hilfe schauen. :D
Antworten