Lade Balcken am Anfang

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

BB-Freak

Betreff: Lade Balcken am Anfang

BeitragSo, Dez 12, 2010 9:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Forum,

ich weiß nicht ob es schon einen solchen Thread gibt(Ich habe jedenfalls keinen gefunden Wink ).

Ich will, da es am Anfang immer ein weilchen dauert bis meine Bilder geladen sind möchte ich gerne einen Lade Fenster machen, indem eine kleines Spiel eingebaut ist ,das man dann während des Ladens spielen kann. Leider weiß ich nicht genau wie das gehen soll Embarassed . Man müsste dann das Laden ja in einer Schleife ausführen aber, dann wird jedes Bild 100mal oda so geladen und das Programm stürtzt ab Rolling Eyes .

Hubsi

BeitragSo, Dez 12, 2010 10:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Threads gehts vielleicht. Aber ganz andere Frage, wieviel Daten schaufelst Du in den Speicher das man in der Zeit ein Spielchen spielen könnte?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

mpmxyz

BeitragSo, Dez 12, 2010 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn die Bilder nicht zu groß sind, kann man die Arbeit auch so weit zerstückeln, dass man zwischen den einzelnen Ladevorgängen einen Ladebalken zeichnen lässt. (->keine Threads)
Du kannst dir dafür Types als Liste der zu ladenen/geladenen Bilder erstellen.
Die Ladeschleife würde etwa so aussehen:
BlitzBasic: [AUSKLAPPEN]
While Not allesGeladen
ZeichneLadeBalken() ;inklusive Cls und Flip 0
Local startZeit%=MilliSecs()
While (Not allesGeladen) And (MilliSecs()<startZeit+10) ;10 Millisekunden werden pro Ladeschritt mindestens genutzt, wenn es etwas zu tun gibt.
LadeBild() ;Lade ein Bild und gehe zum nächsten, um dieses beim nächsten Aufruf zu laden.
Wend
Wend

Vorher sollte man aber schauen, dass man nichts unnötiges lädt.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

Sterbendes Lüftlein

BeitragSo, Dez 12, 2010 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Lakorta

BeitragSo, Dez 12, 2010 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde das auch so ähnlich machen:
Code: [AUSKLAPPEN]

;Balkenbilder laden
Drawimage balken_teil_1, 0, 550

;Andere Bilder laden
Drawimage balken_teil_2, 50, 550

usw...


Die Balkenbilder ergeben dann zusammengezeichnet einen langen Balken. Allerdings kannst du das auch machen, das du mehrer Balkenbilder hast, die nicht nebeneinander gezeichnet werden, sondern das du immer per Cls die alten Bilder löschst und den neueren, längeren Balken dahin zeichnest. Am Ende kannst du dann auch per FreeImage den Balken wieder löschen, fallst du ihn nicht mehr brauchst, um den Speicher zu schonen Wink
---

Hubsi

BeitragSo, Dez 12, 2010 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr weicht zwar voll vom Thema ab, aber einen einfach Ladebalken als Image malt man mit DrawImageRect. Hunderte Einzelbilder für einen Ladenbalken ist etwas... komisch Mr. Green
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Pummelie

BeitragSo, Dez 12, 2010 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Du annst es mit Multithreading versuchen, doch ist das nix für Anfänger...

Ansonsten kannst du ja eine 2. exe erstellen, die vom HAuptprogramm aufgerufen wird, bis das Hauptprogramm (in diesem Moment Fensterlos...) mit laden fertig ist...
It's done when it's done.
 

Sterbendes Lüftlein

BeitragSo, Dez 12, 2010 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Hubsi

BeitragSo, Dez 12, 2010 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Vom Thema abweichen, weil er nach einem Minispiel während des Datenschaufelns gefragt hatte, nicht nach einem Lade-vorgangs-fortschritts-balken Wink

Einzelbilder sind unflexibel und fressen unsinnig Ressourcen. Was wenn ich diesen Balken in anderen Spielen wieder verwenden will? Klar, ich packe das in eine Function. Und diese Function errechnet nun anhand des übergebenen Prozentsatzes, Auflösung und Bildgröße wieviel Image gezeichnet werden muß und tut dies. Oder nehmen wir an der Benutzer des Programms kann selbst die Auflösung bestimmen und das Bild soll von der Function zusätzlich noch entsprechend resized werden...


Seiner Frage entnehme ich das BB-Freak nicht zu den "Vollprofis" zählt und damit solche Scherzchen für ihn vermutlich noch gar nicht von Bedeutung sind, aber wenn er von Haus aus schon auf solche Gleise geschoben wird... Du verstehst? Mr. Green
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Sterbendes Lüftlein

BeitragSo, Dez 12, 2010 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt
 

BBPro2

BeitragMo, Dez 13, 2010 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
im übrigen glaube ich dass ihr ihn initial sowieso (fast) alle falsch verstanden habt

seine aussage Zitat:
ich weiß nicht ob es schon einen solchen Thread gibt

bezog sich darauf, dass er die suche verwendet hat.
nicht dass er interesse an multithreading hat. ich vermute mal dass er gar kein BMax hat...

zum problem selbst:

1) ich bezweifle, dass du genug bilder lädst so dass ein minispiel sich lohnen könnte (oder du machst irgendwas falsch^^)

2) die einzige möglichkeit die du hast ist wie bereits vereinzelt erwähnt deine ladesequenz zu splitten.
du musst also abwechselnd ein bild laden und dein minispiel berechnen/darstellen
du könntest z.b. alle 60 durchläufe von deinem minispiel 1 bild für das hauptspiel laden
je nach größe deiner bilder/daten kann das dann trotzdem noch zu lags führen, welche du ohne bmax und damit verbundenen threads allerdings nicht wirklich effektiv umgehen kannst in blitzbasic. (dazu bräuchtest du eine eigenen bilder-lader-routine, welche gezwungenermaßen um einen ENORMEN faktro langsamer wäre als die von bb gestellt - und zudem ist diese aufgabe alles andere als trivial)

das laden der bilder könnte in etwa so aussehen:

Code: [AUSKLAPPEN]


- berechne Minispielschleife

- stelle diese dar

- erhöhe counter um 1

- wenn counter = 60 dann setze counter auf 0 und lade nächstes bild

- [function lade nächste bild]
  lies pfad des nächsten bildes ein (z.b. in einem Data-Field gespeichert o.Ä.)
  lade dieses bild
  kehre zum anfang der Minispielschleife zurück



alles in allem würde ich dir eigentlich von der idee abraten, aber einen kleinen plan hab ich dir trotzdem mal zur verfügung gestellt. hoffe du hast erfolg

Lakorta

BeitragMo, Dez 13, 2010 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest auch statt einem richtigem Minispiel irgendeine kleine Spielerei machen, zum Beispiel Punkte die der aus folgen, oder ein kleines Coic während der Ladezeit Very Happy
Das währe um einiges einfacher und ist ja auch teilweise unterhaltsam.
---
 

Sterbendes Lüftlein

BeitragMo, Dez 13, 2010 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt
 

CO2

ehemals "SirMO"

BeitragMo, Dez 13, 2010 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest ja Tipps&Tricks zum spiel anzeigen lassen, zum ladebalken hab ich hier mal ne kleine funktion geschrieben:

BlitzBasic: [AUSKLAPPEN]
Function CreateBar(Percent, posx, posy, r = 255, g = 255, b = 255)

Locate posx, posy ;Positionieren

Local pos = posx ;Variable festlegen

Local ladebalkenlaenge = 1

For x = 0 To Percent ;Solange kästen zeichnen, wie prozent da sind

Color r, g, b

Rect pos, posy, ladebalkenlaenge, 12, 1

Color r + 25, g + 25, b + 25

Rect posx - 1, posy - 1, (ladebalkenlaenge * 100 + 2), 14, 0 ;malt ein umrandungsrechteck

pos = pos + ladebalkenlaenge

Color 255, 255, 255

Next

End Function


mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

BB-Freak

Betreff: Danke...

BeitragDi, Dez 14, 2010 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
-Also zu der Frage ob mein Spiel wirklich soooo lange braucht :Nein braucht es nicht(könnte es aber bald da
es bei 5 oder so Welten 10 sek dauert und ich vtl. 100 mache(ich weiß ergeiz Smile ) dauert es
10*20=200sek:60=3,3333 min
Wink
(Außerdem kommen noch die Items und dass ich alle Bilder als Bmp's hab, weil erst die Demo besitze Embarassed )

-Ähm ich habe auch schon überlegt etwas in Richtung Funktion zu machen( Idea ) aber ich weiß nicht wie ich
da ein Spiel reinpacken soll ^^.

-Falls jemand gegebenen falls eine Idee hat wie ich mein Spiel(das im Fenstermodus ist) minimieren kann,
dann würde ich auch ne 2. ExE mache Rolling Eyes .

Also vielen Dank für eure guten und vielen Antworten !!!

Euer BB-Freak

Xeres

Moderator

BeitragDi, Dez 14, 2010 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Lade nur die benötigten Daten am Anfang und lade beim Levelwechsel etwas nach.
Kurze Ladepausen sind besser als eine lange.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Sterbendes Lüftlein

BeitragDi, Dez 14, 2010 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

BB-Freak

BeitragDi, Dez 14, 2010 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich auch Very Happy
 

primero

BeitragDi, Dez 14, 2010 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, du könntest, wenn deine Bilder oder Daten in Arrays stehen, das Spiel (oder Hauptmenü ... wär ja auch ne Idee) laufen lassen und die Bilder je nach anzahl der durchlaufenen stufen laden. etwa so:

Code: [AUSKLAPPEN]
repeat
spiel ... menü ... sonstiges
n=n+1
a=a+1
if a=1 then bild(n)=loadimage("bild"+n+".bmp") ;Levelbilder werden geladen
if a=2 then bild(n)=loadimage("bild"+n+".bmp")
if a=3 then bild(n)=loadimage("bild"+n+".bmp")
if a=4 then bild(n)=loadimage("bild"+n+".bmp")
if a=5 then
item(n-4)=loadimage("bild"+n-4+".bmp") ;itembilder werden geladen
item(n-3)=loadimage("bild"+n-3+".bmp")
item(n-2)=loadimage("bild"+n-2+".bmp")
item(n-1)=loadimage("bild"+n-1+".bmp")
item(n)=loadimage("bild"+n+".bmp")
a=0 ;level ist fertig, die nächsten levelbilder werden geladen
endif
until


naja, so ähnlich. muss halt angepasst werden.

hoffe das hilft

BB-Freak

Betreff: :)

BeitragMi, Dez 15, 2010 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke hat mir sheeer geholfen !
Nur leider fängt das Spiel,dann an zu laggen oder? Und Loadimage in ner Schleife ist auch net so gut glaub ich.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group