Ladebalken

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

noobohneplan

Betreff: Ladebalken

BeitragMo, Nov 30, 2009 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, meine Frage ist, wie ich einen ladebalken bei diesem spiel hin bekomme: Very Happy

Code: [AUSKLAPPEN]
Graphics 1280,1024

menue=LoadImage ("Hauptmenue.bmp")
ScaleImage menue,1,1;
MaskImage menue,255,255,255

kugelfisch5=LoadImage ("kugelfisch5.bmp")
ScaleImage kugelfisch5,1,1;
MaskImage kugelfisch5,255,255,255


DrawImage kugelfisch5,300,500
DrawImage menue,1,1

WaitKey()
Print"Spiel Startet, Bitte Warten [!]


Color 249,0,0

x=599
y=200
c=700
z=450
r=1
u=270
p=450
i=600
m=700
n=300
v=600
b=400
g=300
h=450

SetBuffer BackBuffer()

kugelfisch=LoadImage ("kugelfisch.bmp")
ScaleImage kugelfisch,0.5,0.5;
MaskImage kugelfisch,17,92,234

kugelfisch1=LoadImage ("kugelfisch1.bmp")
ScaleImage kugelfisch1,0.5,0.5;
MaskImage kugelfisch1,17,92,234

kugelfisch3=LoadImage ("kugelfisch3.bmp")
ScaleImage kugelfisch3,0.5,0.5;
MaskImage kugelfisch3,17,92,234

kugelfisch2=LoadImage ("kugelfisch2.bmp")
ScaleImage kugelfisch2,0.5,0.5;
MaskImage kugelfisch2,17,92,234

schatztruhe=LoadImage ("schatztruhe.bmp")
ScaleImage schatztruhe,1,1;
MaskImage schatztruhe,17,92,234

schatztruhe2=LoadImage ("schatztruhe2.bmp")
ScaleImage schatztruhe2,1,1;
MaskImage schatztruhe2,17,92,234

schatztruhe3=LoadImage ("schatztruhe3.bmp")
ScaleImage schatztruhe3,1,1;
MaskImage schatztruhe3,17,92,234

map1=LoadImage ("map1.bmp")
ScaleImage map1,1.7,1.7;
MaskImage map1,255,255,255
                                 
map2=LoadImage ("map2.bmp")
ScaleImage map2,1.7,1.7;
MaskImage map2,255,255,255

map3=LoadImage ("map3.bmp")
ScaleImage map3,1.7,1.7;
MaskImage map3,255,255,255

map4=LoadImage ("map4.bmp")
ScaleImage map4,1.7,1.7;
MaskImage map4,255,255,255

ziel1=LoadImage ("ziel1.bmp")
ScaleImage ziel1,0.9,0.9;
MaskImage ziel1,255,255,255

ziel2=LoadImage ("ziel2.bmp")
ScaleImage ziel2,1,1;
MaskImage ziel2,255,255,255

ziel3=LoadImage ("ziel3.bmp")
ScaleImage ziel3,1,1;
MaskImage ziel3,255,255,255

hintergrund1=LoadImage ("hintergrund1.bmp")
ScaleImage hintergrund1,1,1;
MaskImage hintergrund1,255,255,255

hintergrund4=LoadImage ("hintergrund4.bmp")
ScaleImage hintergrund4,1,1;
MaskImage hintergrund4,255,255,255

hintergrund3=LoadImage ("hintergrund3.bmp")
ScaleImage hintergrund3,1,1;
MaskImage hintergrund3,255,255,255

hintergrund2=LoadImage ("hintergrund2.bmp")
ScaleImage hintergrund2,1,1;
MaskImage hintergrund2,255,255,255

blasen=LoadImage ("blasen.bmp")
ScaleImage blasen,1,1;
MaskImage blasen,17,92,234

menue=LoadImage ("Hauptmenue.bmp")
ScaleImage menue,1,1;
MaskImage menue,255,255,255

rand1=LoadImage ("rand1.bmp")
ScaleImage rand1,1,1;
MaskImage rand1,255,255,255

rand2=LoadImage ("rand2.bmp")
ScaleImage rand2,1,1;
MaskImage rand2,255,255,255

rand3=LoadImage ("rand3.bmp")
ScaleImage rand3,1,1;
MaskImage rand3,255,255,255

Cls


blubb=PlayMusic("1.mp3") 

ClsColor 17,92,234 Cls



While Not KeyHit(1)


If KeyDown(205) ; (links)
r=1
x=x+10
vonwo$ = "rechts"
EndIf

If KeyDown(203) ; (rechts)
r=2
x=x-10
vonwo$ = "links"
EndIf

If KeyDown(208) ; (hoch)
r=3
y=y+10
vonwo$ = "runter"
EndIf

If KeyDown(200) ; (runter)
r=4
y=y-10
vonwo$ = "hoch"
EndIf
 
Cls

If ImagesCollide (kugelfisch,x,y,0,schatztruhe,c,z,0) And vonwo$ = "runter"
z=z+10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe,c,z,0) And vonwo$ = "links"
c=c-10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe,c,z,0) And vonwo$ = "rechts"
c=c+10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe,c,z,0) And vonwo$ = "hoch"
z=z-10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe2,g,h,0) And vonwo$ = "runter"
h=h+10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe2,g,h,0) And vonwo$ = "links"
g=g-10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe2,g,h,0) And vonwo$ = "rechts"
g=g+10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe2,g,h,0) And vonwo$ = "hoch"
h=h-10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe,v,b,0) And vonwo$ = "runter"
b=b+10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$
If ImagesCollide (kugelfisch,x,y,0,schatztruhe3,v,b,0) And vonwo$ = "links"
v=v-10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe3,v,b,0) And vonwo$ = "rechts"
v=v+10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$

If ImagesCollide (kugelfisch,x,y,0,schatztruhe3,v,b,0) And vonwo$ = "hoch"
b=b-10
Text 0,0, "hallo"
EndIf
Text 0,0, vonwo$



If ImagesCollide (schatztruhe,c,z,0,ziel1,u,800,0)
c=c-10
z=z-10
EndIf
If ImagesCollide (schatztruhe2,g,h,0,ziel2,p,i,0)
g=g-10
h=h-10
EndIf
If ImagesCollide (schatztruhe3,c,z,0,ziel3,m,n,0)
c=c-10
z=z-10
EndIf


If ImagesCollide (kugelfisch,x,y,0,map1,200,100,0) And vonwo$ = "links"
x=x+10
EndIf
If ImagesCollide (kugelfisch,x,y,0,map2,216,861,0) And vonwo$ = "runter"
y=y-10
EndIf
If ImagesCollide (kugelfisch,x,y,0,map3,216,100,0) And vonwo$ = "hoch"
y=y+10
EndIf
If ImagesCollide (kugelfisch,x,y,0,map4,993,100,0) And vonwo$ = "rechts"
x=x-10
EndIf




If r=3 DrawImage kugelfisch2,x,y
If r=4 DrawImage kugelfisch3,x,y
If r=1 DrawImage kugelfisch,x,y
If r=2 DrawImage kugelfisch1,x,y

DrawImage schatztruhe,c,z
DrawImage schatztruhe2,g,h
DrawImage schatztruhe3,v,b
DrawImage map1,200,100
DrawImage map2,216,861
DrawImage map3,216,100
DrawImage map4,993,100
DrawImage ziel1,u,150
DrawImage ziel2,p,i
DrawImage ziel3,m,n
DrawImage hintergrund1,-205,0
DrawImage hintergrund2,200,877
DrawImage hintergrund3,50,-305
DrawImage hintergrund4,1009,50
DrawImage blasen,380,200
DrawImage blasen,545,680
DrawImage rand1,760,509
DrawImage rand2,215,250
DrawImage rand3,350,743


Flip
Wend



undzwar möchte ich wenn das hauptmenü geladen ist, einen ladebalken haben, wo man sehen kann wann das programm fertig ist (100%hat) mit den bildern zu laden.

Liebe Grüße
noobohneplan

blackgecko

BeitragMo, Nov 30, 2009 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
In BlitzPlus geht das mit CreateProgBar
Aber ich vermute mal du nutzt irgendeine andere Version. In dem Fall musst du dir selbst einen Ladebalken zusammenbasteln.

Vorschlag: Mal ein leeres Rechteck als Umrandung in dein Grafikfenster und dann ein gefülltes Rechteck je nachdem, wie viel geladen ist. Dann musst du jedes Mal nach dem Laden eines Bilds das gefüllte Rechteck ein Stück größer malen und es so hintüfteln, dass der Ladebalken voll ist, wenn alle Bilder geladen sind. Wenn das funktioniert, kann man noch die Rechtecke durch Bilder ersetzen, damit es schöner aussieht, aber erst mal muss es überhaupt funktionieren.
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax
Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die.

ozzi789

BeitragMo, Nov 30, 2009 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey

ScaleImage ziel3,1,1;

was soll das bringen?
Du skalierst ein Bild auf den Wert den es schon hat? Very Happy
Noch ein Tipp: Benütze lieber PNG, BMP ist zu gross und hat keinen Vorteil gegenüber PNG Wink

Achja, hast du schon inner Forensuche gesucht? Hättest sicher einige Treffer gelandet!


So hier mal ein Lösungsansatz..
Code: [AUSKLAPPEN]
Global fortschritt
Color 100,100,100
Rect 0,0,110,10


    lol=LoadImage("lol.png")   
    updatebar()
   zomg=LoadImage("zomg.png")
    updatebar()


Text 0,100,"FERTIG!"
WaitKey


Function updatebar()
   fortschritt=fortschritt+1 ; Selbstklärend
   
   For i=1 To fortschritt ; So nun zeichnen wir nen tollen Balken
      Color 255,255,255
      Rect 1*fortschritt,y, 10,10
   Next
End Function





Aber:
So wie ich es jetzt gemacht habe, zeigt es nicht tatsächlich den Prozentsatz wie weit dein Programm ist, weil ja nicht alle Bilder gleich gross sind -> d.h laden unterschiedlich lange


Du könntest aber auch die Gesamtgrösse aller Files ermitteln, dann die Grösse von den gelanden Files zusammen addieren und die Summe von der Gesamtgrösse abziehn und in Prozent "umwandeln"

also zmb 3 von 20 mb geladen also 17 mb müssen geladen werden -> 100/20 = 5 -> 5*17 = 85% die noch geladen werden müssen -> 100-85 also 15% schon geladen Smile


So würds dann aussehen, hab hier etwas getrickst um zu simulieren als ob man die Bilder lädt
Code: [AUSKLAPPEN]
Global fortschritt
Color 100,100,100
Rect 0,0,110,10

Repeat ;Hauptschleife

    For foobar=1 To 100000 ;Simulieren als ob der PC was macht
   temp=2934^29+3030*19/1029-2+4949
   Next
   
   updatebar()

Until fortschritt=100 ;Hauptschleife wiederholen bis fortschritt=100

Text 0,100,"FERTIG!"
WaitKey


Function updatebar()
   fortschritt=fortschritt+1 ; Selbstklärend
   
   For i=1 To fortschritt ; So nun zeichnen wir nen tollen Balken
      Color 255,255,255
      Rect 1*fortschritt,y, 10,10
   Next
End Function




mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
  • Zuletzt bearbeitet von ozzi789 am Mo, Nov 30, 2009 18:57, insgesamt 2-mal bearbeitet

mpmxyz

BeitragMo, Nov 30, 2009 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
1. "ScaleImage Bild,1,1" bringt nicht sehr viel...
2. ...Einrücken dagegen schon.
3. Da dieses Spiel ziemlich hardgecodet ist, müsstest du eine Funktion schreiben, die einen Ladebalken für xy% zeichnet, und nach jedem LoadImage/ScaleImage diese Funktion mit einem größeren Fortschritts-/Prozentwert verwenden.

Es wäre einfacher, wenn du irgendwo eine Liste an den zu ladenen/geladenen Bildern hättest, da du dann nur in der/den "Ladeschleifen" jeweils ein einziges Mal die Ladebalkenzeichenfunktion nutzen muss und jeweils nur aus dem Verhältnis zwischen der Anzahl der geladenen Bilder und der Gesamtanzahl an Bildern den Fortschritt berechnest.
Du solltest dir irgendwann in der nächsten Zeit mal Arrays und Types ansehen.

Jeder hat einmal irgendwo angefangen, also gebe ich zum Thema Functions auch noch einen Verweis auf die Hilfe.

4. Zitat:
Print"Spiel Startet, Bitte Warten [!]

Der Compiler meckert zwar - leider - nicht, aber man sollte immer auch noch schließende Anführungszeichen nutzen.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

noobohneplan

Betreff: oki :)

BeitragMo, Nov 30, 2009 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
hey, danke erstmal mit dem scaleimage, ich hab es weggemacht und nun klappt es viel besser (schneller).

und nun zum ladebalken, ja er funktioniert soweit aber wie du schon sagtest ist das nicht der richtig balken, außerdem ist der balken bei mir schon bei knapp 1-2sek. fertig mit laden, aber mein spiel lädt ungefähr 10sek Smile


doch den zweiten teil, damit der ladebalken auch wirklich erst dann fertig ist wenn die bilder auch geladen sind, habe ich nicht ganz verstanden.

also die bilder sind insgesamt: 14.8mb groß die er lädt.

könntest du mir vll den code schreiben verstehe nämlich wirklich nicht wie du das meinst.

liebe grüße
noobohneplan
 

noobohneplan

Betreff: huhu

BeitragMo, Nov 30, 2009 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
oki, aber der lädt ja die ganzen bilder erst nachdem der lade balken fertig ist,

d.h. der macht erst den ladebalken fertig,
dann lädt er die bilder...

ich würde aber gerne dass der die bilder während des fortschreiten des ladebalken lädt geht das?

blackgecko

BeitragMo, Nov 30, 2009 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Doppelposts bitte vermeiden und statt dessen den 'Bearbeiten' - Button oben rechts an deinen Posts verwenden.

Du musst dir folgendes überlegen:
14,8 MB --> 100%
7,4 MB --> 50%
xy MB --> 100 / (14,8 / xy) %

Und den Ladebalken musst du natürlich immer nach jedem geladenen Bild aktualisieren.
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax
Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die.
 

noobohneplan

Betreff: okok

BeitragMo, Nov 30, 2009 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
okey danke, aber er macht dies trotzdem nach der reihe oder?

ich würde gerne, dass der lade balken läuft, und gleichzeitig die bilder lädt...

blackgecko

BeitragMo, Nov 30, 2009 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Richtig, er lädt zuerst ein Bild und dann wird der Ladebalken aktualisiert. Dann wird das nächste Bild geladen und der Ladebalken wieder aktualisiert usw.

Um das "gleichzeitig" zu machen, bräuchtest du Multithreading, was Blitzbasic nicht eingebaut hat.
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax
Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die.

Tennisball

BeitragMo, Nov 30, 2009 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
...Oder du könntest dir eine eigene Laderoutine basteln.

mpmxyz

BeitragMo, Nov 30, 2009 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du es richtig machst, braucht das Zeichnen des Ladebalkens noch nicht einmal eine einzige Millisekunde Zeit.
Selbst, wenn es mal eine ganze Millisekunde brauchen würde, würde diese bei den geschätzten 500 Millisekunden pro Bild nicht weiter auffallen.

Selbst wenn sich etwas Multitasking nennt, wird alles, wenn man jetzt mal von Mehrkernprozessoren oder Ähnlichem absieht, beim Computer nacheinander ausgeführt.
Diese Sachen werden dann allerdings so schnell abwechselnd bearbeitet, dass es so scheint, als ob sie gleichzeitig ablaufen.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

noobohneplan

Betreff: huhu

BeitragMo, Nov 30, 2009 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
oki danke für eure hilfe, werde jetzt mal den balken was schöner gestalten

grüße
noobohneplan Very Happy
 

Krischan

BeitragMo, Nov 30, 2009 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habs bei BlitzTiles so gemacht (schon wieder ein Spinoff davon):

Die Funktion UpdateBar funktioniert so: Angenommen wir haben eine Schleife von 1...1000, dann ist 1000="maximal" und "aktuell" der aktuelle Schleifenzähler von 1...1000. Zudem müssen wir noch wissen, wie weit wir insgesamt mit de Laden sind, dazu gehören zwei Prozentwerte, start und ende des jeweiligen Vorganges, also 0...10 und dann weiter mit 10...25 z.B. bis wir auf 100 sind.

Die Demo zeigt wie es funktioniert.

UpdateBar("Titel",aktuell,maximal,prozentstart,prozentende)

Code: [AUSKLAPPEN]
Graphics 800,600,32,2

SetBuffer BackBuffer()

Global Screenwidth=GraphicsWidth()
Global Screenheight=GraphicsHeight()
Global title$="Loading Bar Demo"

For i=0 To 300

   UpdateBar("Vorgang 1",i,300,0,30)
   
Next

For j=0 To 1000
   
   UpdateBar("Vorgang 2",j,1000,30,100)
   
Next

Cls

Print "Fertig!"

WaitKey

End

Function UpdateBar(info$,current#,max#,startpercent#=0.0,endpercent#=100.0,r1%=128,g1%=0,b1%=0,r2%=0,g2%=192,b2%=0,r3%=255,g3%=255,b3%=255)
   
   Local percent#,milepercent#
   
   Local width%=Screenwidth/2
   Local height%=18
   Local midx%=(Screenwidth/2)
   Local midy%=(Screenheight/2)
   Local sx%=midx-(width/2)
   Local sy%=midy-(height/2)
   Local factor#=width*1.0/100
   
   ; program termination always possible
   If KeyHit(1) Then End
   
   ; calc percentages
   percent=(current*100.0)/max
   milepercent=((percent*(endpercent-startpercent))/100.0)+startpercent
   
   ; upper bar border, red bar background, green progress bar (total)
   DrawBar(sx,sy,width,height,r1,g1,b1)
   DrawBar(sx,sy,Int(milepercent*factor),height,r2,g2,b2)
   Color 0,0,0 : Rect sx,sy,width+1,height,0
   
   ; lower bar border, red bar background, green progress bar (current task)
   DrawBar(sx,sy+height+3,width,height,r1,g1,b1)
   DrawBar(sx,sy+height+3,Int(percent*factor),height,r2,g2,b2)
   Color 0,0,0 : Rect sx,sy+height+3,width+1,height,0
   
   Color r3,g3,b3
   
   ; text infos
   Text midx,midy-18,title,1,1
   Text midx,midy-1,Int(milepercent)+"%",1,1
   Text midx,midy+height+2,info,1,1
   
   Flip 0
   
End Function

Function DrawBar(x%,y%,width%,height%,r%,g%,b%)
   
   Local i%,c%
   
   For i=0 To height-1
      
      Color r,g,b
      Line x,y+i,x+width,y+i
      
   Next
   
End Function
 

noobohneplan

Betreff: geil!

BeitragMo, Nov 30, 2009 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
wow nice! Smile

ozzi789

BeitragMo, Nov 30, 2009 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Vlt hilft dir das Very Happy

https://www.blitzforum.de/foru...p?p=351710
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group