DrawImage sehr langsam???
Übersicht

![]() |
gochxBetreff: DrawImage sehr langsam??? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen,
bin absoluter Anfänger in BMax, aber hab hierzu keine richtige Anleitung gefunden: Ich lade Bilder zu Beginn meines Spiels (also vor der Hauptschleife) mit Code: [AUSKLAPPEN] Global My_bild:Timage=LoadImage( "bild.bmp" )
Also so wie's in den meisten tutorials steht. Wenn ich diese bilder nun in der hauptschleife mit Code: [AUSKLAPPEN] DrawImage(My_bild, X, Y)
lade, funktioniert das zwar perfekt, ist aber sehr langsam ![]() Mein Spiel soll aus gleichartigen Blöcken bestehen die geweils 25x25 pixel groß sind. Schon bei mehr als 20 Blöcken geht die grafik aber ziemlich in die Knie. Ganz schlimm wird's, wenn ich versuche davor ein hintergrundbild zu zeichnen. Klar, mein Rechner ist alt und langsam, aber ich mache doch bestimmt einen grundlegenden Fehler, oder? Danke Gochx |
||
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein paar Infos mehr wären ganz nett.
Schreibe die wichtigsten technischen Daten deines Rechners auf, ausserdem wäre ein bisschen mehr Sourcecode sicherlich hilfreich. hamZta |
||
Blog. |
![]() |
gochx |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also der Code sieht ungefähr so aus:
Code: [AUSKLAPPEN] Graphics 800,600,0 'Set graphics mode SetMaskColor 0,0,0 'Black is the default anyway '-------------Bilder laden--------------------------' Global My_Blue:Timage=LoadImage( "blue.bmp" ) Global My_Yellow:Timage=LoadImage( "yellow.bmp" ) Global My_Green:Timage=LoadImage( "green.bmp" ) Global My_Red:Timage=LoadImage( "red.bmp" ) Global My_Mitte:Timage=LoadImage( "mitte.bmp" ) Global My_Back:Timage=LoadImage( "back.bmp" ) Global My_bluegreen:Timage=LoadImage( "bluegreen.bmp" ) Global My_white:Timage=LoadImage( "white.bmp" ) Global S_nomove=LoadSound("nomove.wav") Global S_rowclear=LoadSound("rowclear.wav") Global S_blocdown=LoadSound("blocdown.wav") Global S_turn=LoadSound("turn.wav") MidHandleImage( My_blue) MidHandleImage( My_yellow) MidHandleImage( My_green) MidHandleImage( My_red) MidHandleImage( My_bluegreen) MidHandleImage( My_white) MidHandleImage( My_Mitte) MidHandleImage( My_Back) '==============Beginn Hauptschleife===================' While Not KeyDown(Key_Escape) SetRotation(0) DrawImage(My_Back, 400, 300) '--------------Blöcke zeichnen--------------------' DrawImage(My_Mitte, 500,300) For sXX = 1 To 14 For sX = 1 To 8 If Array1[sX,sXX,0]>0 ArrX=sX-1+rowshift If (arrX>8) arrX=arrX-8 X = whichX (arrX,sXX) Y = whichY (arrX,sXX) SetRotation((360/8)*(arrX-1)) If array1[sX,sXX,0]=1 DrawImage(My_blue, X,Y) If array1[sX,sXX,0]=2 DrawImage(My_green, X,Y) If array1[sX,sXX,0]=3 DrawImage(My_red, X,Y) If array1[sX,sXX,0]=4 DrawImage(My_yellow, X,Y) If array1[sX,sXX,0]=5 DrawImage(My_white, X,Y) If array1[sX,sXX,0]=6 DrawImage(My_bluegreen, X,Y) End If Next Next Flip;Cls Wend whichX und whichY sind Funktionen mit denen ich die koordinaten ermittle. Das Beispiel ist natürlich nur nen Ausschnitt, aber vom Prinzip funktioniert das bei mir so. Er zeichnet ja auch richtig, nur ist zu langsam. Mein Rechner ist nen Pentium mit glaub 500 MB Ram. Ich denk daran kanns aber nicht liegen. Hab schon einige Blitzbasic spiele gespielt, die einwandfrei laufen. z.B. Stranded II und so... Das hier ist ja wirklich nur einfachste 2D Grafik ohne Extras. Das muss doch gehen! |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn ich das so anschaue, sollte doch das wirklich schön micht 60FPS laufen..... Bau doch mal einen FPS-Zähler ein und verwende vielleicht mal Flip 0.... | ||
battlegorge |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
In deinem Code finde ich keinen grösseren Fehler.
Drawimage ist eigentlich sehr schnell. 2000 oder mehr Objekte oder Tiles sind auch auf langsameren PCs kein Problem! Wieviele ms braucht dein Programm um einen frame zu berechen? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und wenn du dann die FPS misst, bau flip 0 ein statt flip weil du sonst nur die bildschirmwiederholungsrate erhälst | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
gochx |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank für die Hilfe.
Das mit flip 0 hab ich nicht ganz kapiert. Bei mir meldet er da "to many function parameters". Nichts desto trotz hab ich mal einen Framezähler eingebaut, der so aussieht: Code: [AUSKLAPPEN] framestart=MilliSecs() 'vor der Hauptschleife '---Hauptschleife: If (frames<1000) fratime = MilliSecs()-framestart frames=frames+1 framil=fratime/frames frasec=(frames*1000)/fratime End If Die Zahlen sind eigentlich eindeutig. Ohne das Hintergrundbild liegt frasec, also Frames/Sekunde bei 11, danach sogar nur bei 4. Also entsprechend braucht er ca 80 oder eben 250 Millisekunden für einen Durchlauf der Hauptschleife. Zum Test hab ich diesen Zähler auch mal in das Demoprogramm plot.bmx eingebaut. Das müsste ja eigentlich sehr schnell gehen. Der komplette Code sieht dann so aus: Code: [AUSKLAPPEN] ' plot.bmx ' plots a cosine graph ' scrolls along the graph using an incrementing frame variable Graphics 640,480 frames=0 framestart=MilliSecs() While Not KeyHit(KEY_ESCAPE) If (frames<200) fratime = MilliSecs()-framestart frames=frames+1 framil=fratime/frames frasec=(frames*1000)/fratime End If Cls For x=0 To 640 theta=x+frame y=240-Cos(theta)*240 Plot x,y Next frame=frame+1 DrawText "Frames: " + frames, 20, 280 DrawText "Frametime:" + fratime , 20, 350 DrawText "FrameMil:" + framil , 20, 400 DrawText "FrameSec:" + frasec , 20, 450 Flip Wend Ergebnis: ca. 20 Frames pro Sekunde, 50ms pro Frame. Vielleicht hab ich ein Problem mit meinem Grafikkartentreiber oder so. Läuft BMax standardmäßig immer mit OpenGL oder kann man das umschalten? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du benutzt nicht evtl die Demo?
Falls doch: Hat keinen Zweck, die Demo basiert auf fast 1.5 jahre altem Code auf Windows und hat nur wenig bis nichts mit der aktuellen BM Version zu tun. Sie ist langsam, instabil und bugverseucht. Sie dient lediglich dem was der Name sagt: Antesten der Sprache. Mehr kannst du damit nicht machen, etwas "ernsthafteres" damit zu starten wäre nutzlos da Teile des Codes inkompatibel sind mit der aktuellen BM Version Von deinen FPS her würd ich sagen, dass du ne grottige Grafikkarte hast die sich mit OpenGL noch weniger verträgt. (BM hat keinen 2D Modus, alles was du siehst ist 3D gerendert und in 2D projiziert) Würd auch erklären, warum du nirgends ein Strict hast welcher wohl einer der wichtigsten Befehle ist und ohne welchen der Code eigentlich inakzeptabel ist (wegen einigen Optimierungen Seitens BM, die ohne Strict / SuperStrict nicht aktiv sind) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
gochx |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dreamora hat Folgendes geschrieben: du benutzt nicht evtl die Demo?
Doch, hab noch genau 11 Tage, danach wollt ich über den Kauf entscheiden. Wie gesagt, ich bin absoluter Anfänger und hatte eigentlich nur versucht die Sprache anzutesten und ob ich damit auch wohin komm. Eigentlich funktioniert mein kleines Testspiel bis auf die Geschwindigkeitsprobleme auch perfekt (bin richtig stolz drauf was man in genau drei Tagen BMax lernen kann ![]() Dreamora hat Folgendes geschrieben: Falls doch: Hat keinen Zweck, die Demo basiert auf fast 1.5 jahre altem Code auf Windows und hat nur wenig bis nichts mit der aktuellen BM Version zu tun. Sie ist langsam, instabil und bugverseucht.
Ok, dann kann die Kaufversion ja nur besser sein. Dreamora hat Folgendes geschrieben: Von deinen FPS her würd ich sagen, dass du ne grottige Grafikkarte hast die sich mit OpenGL noch weniger verträgt.
Auch hier ja, hab ja wie gesagt nen alten Rechner. Allein an der Karte kanns aber wirklich nicht liegen. Wie gesagt, andere vorkompilierte Programme funktionieren echt gut. Liegt wahrscheinlich dann doch an der Demoversion. Dreamora hat Folgendes geschrieben: Würd auch erklären, warum du nirgends ein Strict hast welcher wohl einer der wichtigsten Befehle ist und ohne welchen der Code eigentlich inakzeptabel ist
Ok, werds mir für meinen weiteren Lernprozess merken. Hab ich zwar in den Tutorials gelesen, aber in den Beispielen ist das bei der Demo glaub weitestgehend nicht so. Also danke für die Mühen, hab nicht damit gerechnet, dass das an der Demoversion liegen könnte. Werds dann wohn doch besser gleich mit der Vollversion versuchen. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Hauptgrund warum vorkompiliertes schneller läuft ist weil mit 1.16 ein DX Modul dazu kam ... das hilft im Falle von OpenGL "inkompatibler" oder einfach Onboard Hardware (Intel, S3, SiS) dann doch beträchtlich ![]() Solltest du dich zum kauf entscheiden wird das ganze bedeutend schneller werden ![]() Kannst ja mal im Module Board Vertex Mapeditor.de.vu Modul ansehen, da ist ein Sample drin ... das würde ich empfehlen mal anzusehen (SNES Zelda map), damit du ein Gefühl dafür bekommst was Tilesystem mässig mit der Kaufversion möglich ist. ![]() Aber find ich gut, dass du obwohl du nur die Demo antestest und nur 3 Tage damit geübt hast, dennoch soviel Eigeninitiative zeigst etc ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
gochx |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für den tipp. Sieht wirklich gut aus und funktioniert auch bei meiner Grafikkarte einwandfrei.
Dann werd ich wohl mal mein Konto plündern und die Vollversion bestellen. Mein Interesse an BlitzMax ist auf jeden Fall geweckt ![]() |
||
![]() |
gochx |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also zur Ergänzung für alle die ein ähnliches Problem haben:
Ich hab soeben den Download Link zu meiner eigenen BlitzMax Vollversion bekommen. Nach der Installation und den entsprechenden Updates bin ich wirklich begeistert ![]() Mein Spiel läuft einwandfrei und die Geschwindigkeit ist wirklich top. Hätte nicht gedacht, dass die Veränderungen gegenüber der Demoversion noch soviel aus meiner alten Kiste rausholen können. Das einzige was ich nicht versteh ist warum die dann so ne alte Demoversion überhaupt online stellen. Ist für jeden der ernsthaft Interesse hat zunächst irritierend. Naja.... |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das wird leider niemand je verstehen.
Verschiedene User (darunter auch ich immer wieder ma) haben BRL schon darauf aufmerksam gemacht, dass die BM Demo die für Windows erhältlich ist, schon seit nem Jahr nichts mehr mit Blitz zu tun hat und ob sie diese nicht entweder endlich updaten oder entfernen könnten. Derzeit taugen bestenfalls die OSX Versionen was aber selbst die sind noch veraltet, zb haben sie noch die alte TList und TMap implementation und einige nicht unwichtige Fixes im Kern und GC fehlen da auch noch. Hoffen wir von daher Mal das es mit der nächsten Version auch ne neue Demo gibt aufgrund der bis anhin angekündigten neuen Dingen wie Reflection, der neuen IDE etc. Wann die Version hingegen kommt ist ne andere Frage ^^ |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group