Probleme mit Sprites

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Probleme mit Sprites

Beitrag von Dark Skillu »

Hallo ich habe versucht ein Programm zu schreiben welches ein Fenster öffnet und einen Sprite als Background anzeigt und schließt wenn ich Escape drücke aber das funktioniert nicht so ganz und zeigt nur einen schwarzen Bildschirm :

Code: Alles auswählen

UseJPEGImageEncoder() 
InitSprite() 
InitKeyboard() 
OpenScreen(640,480,16,"...")
LoadSprite(0,"C:\bg.jpg",0)  

Repeat
ExamineKeyboard()

If WindowEvent = KeyboardPushed(1)
  quit=1 And CloseScreen()
EndIf

Until quit=1
Ich benutze PureBasic 4.0.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

Hab deinen ratschlag mal befolgt aber es kommt eine Error-Meldung und wo muss ich das FlipBuffers() hinpacken ist das egal?Das DisplaySprite muss vor die Schleife hinter openscreen irgendwo, sonst kommt ein Error :

Code: Alles auswählen

UseJPEGImageEncoder() 
InitSprite() 
InitKeyboard() 
OpenScreen(640,480,16,"...")
LoadSprite(0,"C:\bg.jpg",0) 
DisplaySprite(0, 200,400)

Repeat
ExamineKeyboard()

If WindowEvent = KeyboardPushed(1)
  quit=1 And CloseScreen()
EndIf


 
FlipBuffers()

Until quit=1


Ich benutze PureBasic 4.0.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Code: Alles auswählen

InitSprite() : InitKeyboard()

OpenWindow(0,0,0,640,480,"void",#WS_SYSMENU | #WS_CAPTION | 1)
OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
CreateSprite(0,640,480)

StartDrawing(SpriteOutput(0))
For i=0 To 479
Box(0,i,640,i,RGB(i*255/479,0,0))
Next
StopDrawing()

Repeat
   EventID = WindowEvent()
   ExamineKeyboard()
   ClearScreen(255)      
   DisplaySprite(0,0,0)   
   FlipBuffers()
Until EventID = 16 Or KeyboardPushed(1)
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Dark Skillu hat geschrieben:Das DisplaySprite muss vor die Schleife ...
wie kommst du auf diese idee?

ein Sprite ist wie ein Aufkleber, ein Brush, ein Decal.

wenn du mit einem screen arbeitest, hast du in jedem schleifendurchlauf drei grundsätzliche vorgänge:

1. Screen löschen
2. Inhalt darstellen (also hier auch Sprites displayn)
3. Buffer flippen

du solltest dir darüber klarwerden, was für vorgänge du überhaupt durchführen willst.
was ein screen ist, was ein sprite ist, was die buffer sind, und wie das ganze benutzt wird.

beim befehle-bunt-zusammen-würfeln kommt zwar auch code raus, aber meistens kot.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

Kaeru Gaman hat geschrieben:
Dark Skillu hat geschrieben:Das DisplaySprite muss vor die Schleife ...
wie kommst du auf diese idee?
Weil FluidByte was von DisplaySprite() und FlipBuffers(), ich hab die Befehle dann ind er Hilfe mal nachgschaut und wusste dann nciht wo ich die einfügen muss, als ich in der repeat schleife display sprite eingefügt habe kam nen error, dass es keinen screen gäbe oder so ich weiß es nicht genau, und hab deshalb den befehl vor die schleife gepackt und da kam nen anderer error
Ich benutze PureBasic 4.0.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> als ich in der repeat schleife display sprite eingefügt habe kam nen error, dass es keinen screen gäbe

wenn der fehler heißt, es gibt keinen screen, dann ist der fehler,
dass es keinen screen gibt, und nicht dass der befehl in einer schleife steht.

> oder so ich weiß es nicht genau

fehlermeldungen werden deshalb in schriftlicher form angezeigt, weil sie einen klaren hinweis auf die ursache geben.
also, lesen, merken, nachprüfen.

> und hab deshalb den befehl vor die schleife gepackt und da kam nen anderer error

das meinte ich vorher. programmierung ist kein code-zusammenwürfel-spiel.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

LEUTE LEUTE!!!

Macht die Augen auf!!! :allright:

UseJPEGImageEncoder()
InitSprite()
InitKeyboard()
OpenScreen(640,480,16,"...")
LoadSprite(0,"C:\bg.jpg",0)
DisplaySprite(0, 200,400)

Repeat
ExamineKeyboard()

If WindowEvent = KeyboardPushed(1)
quit=1 And CloseScreen()
EndIf

Code: Alles auswählen

UseJPEGImageDecoder() ; Dekodieren, nicht Codieren!!!
InitSprite() 
InitKeyboard() 
OpenScreen(640,480,16,"...")  ; FullScreen
LoadSprite(0,"C:\bg.jpg",0)  

Repeat 
  ExamineKeyboard()   
  
; Kein Openwindow, also auch kein WaitWindowEvent()

  If KeyboardPushed(#PB_Key_Escape) 
    Quit=1
  EndIf 
  
  ClearScreen(0) ; Schwarz, wenn man bewegte Sprites haben möchte später
  DisplaySprite(0,0,0) ; obere linke Ecke
  
  FlipBuffers()   
  
Until Quit=1 
 CloseScreen() 
Ohne FlipBuffers()
bleibt der Bildschirm schwarz. Wenn ClearScreen() rausgenommen wird und DisplaySprite vor der Schleife steht, flackert es ganz schön.

:freak: :allright:
Zuletzt geändert von Xaby am 14.05.2007 21:11, insgesamt 2-mal geändert.
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Und? Sein Code ist sowie verkorkst. Das Dekodieren des Bildes ist sein geringstes Problem. Er muss erstmal verstehen wie man einen WindowedScreen öffnet und Events abfragt.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nuja... man kann hier wirklich ne menge aufzählen...

sowas hier zum bleistift

Code: Alles auswählen

If WindowEvent = KeyboardPushed(1)
  quit=1 And CloseScreen()
EndIf 
wie Xaby sagte, kein Window, kein Event.

aber KeyboardPushed ist auch gar kein event.

und And ist keine anweisung um befehle zu verknüpfen.

wie ich vorher sagte, befehle zusammenwürfeln ist nicht gleichbedeutend mit programmieren.


> Er muss erstmal verstehen wie man einen WindowedScreen öffnet und Events abfragt.

nö.. er muss nur raffen, dasn screen kein window ist.

aber da fehlt noch viel grundlegender durchblick...

@Skillu

du solltest vielleicht doch erstmal ein paar Tutorials durcharbeiten.

> Weil FluidByte was von DisplaySprite() und FlipBuffers(), ich hab die Befehle dann ind er Hilfe mal nachgschaut

erst lesen, dann basteln... dann klappts auch mit dem nachbarn...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

Sry ich habe aber echt noch nicht viel Ahnung vom Programmieren, ich wusste nciht mehr wie der Befehl hieß damit JPG-Bilder unterstützt werden habe in der Hilfe nacggeschaut und den falschen befehl genommen, wieso ich FlipBuffers brauche habe ich gar keine Ahnung, das braucht man doch nur wenn was gezeichnet wird vom progg um das von der zweiten ebene auf die erste zu bringen damits dargestellt wird. Und die Tutorials die es gibt sind meiner Meinung nach fast alle murks da sie zu 3/4 aus Fehlern bestehen, ich denke mal die sind von ner früheren PB-Version ...

FluidByte mir hilfts nicht soviel wenn du mir Befehle "an den Kopf wirfst" das hilft euch Pros vielleicht aber mir nicht zuviel, du hast aber eh schon deinen post bearbeitet.

Vielleicht kann ich nicht gut programmieren oder werde es nie gut können aber ich habe keinen bock in jedem thread von mir irgendwelche sachen zu lesen, ich würde irgendwelche befehle zusammenschmeißen, ich könnte nicht programmieren etc. , jeder fängt klein an!!

Abfragen ob man auf nen ButtonGadget etc. geklickt hat kann ich aber von Sprites hab ich fast keine Ahnung etc.

Hab bisschen übertrieben ...
Das wars erstmal

MfG
Ich benutze PureBasic 4.0.
Antworten