Seite 1 von 2
Probleme mit Sprites
Verfasst: 14.05.2007 19:13
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
Verfasst: 14.05.2007 19:31
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
Verfasst: 14.05.2007 19:32
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)
Verfasst: 14.05.2007 19:45
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.
Verfasst: 14.05.2007 20:11
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
Verfasst: 14.05.2007 20:15
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.
Verfasst: 14.05.2007 20:44
von Xaby
LEUTE LEUTE!!!
Macht die Augen auf!!!
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.

Verfasst: 14.05.2007 21:09
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.
Verfasst: 14.05.2007 21:11
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...
Verfasst: 15.05.2007 14:58
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