Bilder vor Graphics laden?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bobo2040

Betreff: Bilder vor Graphics laden?

BeitragDo, Aug 28, 2014 2:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Smile

Sry das in letzter Zeit soviele Threads von mir kommen aber ich "arbeite" in letzter Zeit seit langem
mal wieder mit BB und so Very Happy

So zu meinem Problem, ich habe ganz viele Bilder teils sehr große (10mb+) und die müssen in den Ram geladen werden ... so da mein Spiel aber im Vollbildmodus ist ist solange die Bilder geladen werden (insgesamt ca 80mb davon ca 10mb von rotate image(langsam)) ein Schwarzen Bildschirm was ich als seeeehrrr unschön empfinde... weil man das Programm zumindest unter XP nicht ohne weiteres Beenden kann... und weil man den Fortschritt einfach nicht sieht... Was kann ich da jetzt machen? Ich dachte ja aber 2 Graphics Befehle eins mit nem kleinen Fenster als "platzhalter" das auch Windowed ist (Modus = 2) und danach wenn alles Geladen wurde ein Großes das im Vollbildmodus ist aber leider löscht Graphics ja alles an Bildern usw aus dem Speicher raus.. sodass ich die Bilder nochmal laden müsste -> sehr blöd.

Gibt es jetzt irgendwas anderes womit man das Lösen kann aber ich bei dem Vollbildmodus bleiben kann würde ungern Windowed nehmen...

Freue mich über jede anregung und Hilfe! Smile

Mfg
bitro.de

BladeRunner

Moderator

BeitragDo, Aug 28, 2014 6:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach einen Ladescreen, lad den zuerst und zeig ihn an während der Rest eingeladen wird.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Bobo2040

BeitragDo, Aug 28, 2014 8:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt! Gute Idee Smile

Mfg
bitro.de

DAK

BeitragDo, Aug 28, 2014 9:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Am Besten mit einem Ladebalken oder so, den du bei jedem geladenen Bild ein Stück weiter laufen lässt. Auch ein langer Ladebildschirm auf dem sich nichts bewegt kann einen User verunsichern.

Warum brauchen bei dir 80 MB lange zum Laden? Machst du RotateImage für jedes Grad? Wenn ja, dann reduziere es auf alle 5°. Das ist gut genug dass man den Unterschied nicht sieht, aber fünf mal schneller.
Gewinner der 6. und der 68. BlitzCodeCompo

Xeres

Moderator

BeitragDo, Aug 28, 2014 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sehe auch nicht wirklich einen Grund für RotateImage.
Man bekommt ein gleiches oder besseres Ergebnis, wenn man Bildbearbeitungssoftware für die Bearbeitung von Bildern benutzt. Gimp z.B. kann mit Sicherheit eine Reihe von Aktionen durchführen, ohne dass man das alles per Hand machen müsste. Auf LoadAnimImage umsteigen und schon ist die Ladegeschwindigkeit geringer.
Klar muss man die ganzen Daten noch in den Speicher schaufeln, aber zumindest entfällt das ganze CPU intensive gedrehe...

Wenn du es bequem für dich haben willst, dann würde ich beim laden den Hash des Bildes berechnen und die Gedrehte Version generieren und abspeichern. Dann dauert das laden nur beim ersten Start länger (bzw. wenn die Bilder geändert wurden).

Nicht zu Ressourcen fressend programmieren ist löblich, aber ich würde lieber schneller laden als 20 MB einsparen (wo mehr als genug Plattenplatz vorhanden sein sollte).
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)
 

Bobo2040

BeitragDo, Aug 28, 2014 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja schon aber das RotateImage geht ja Relativ flott ^.^ also bei weitem schneller als das Laden der großen Bilder... ich habe jetzt einfach andere Bilder genommen für die Map und die als .jpg abgespeichert damit die schön klein sind (müssen ja nicht gemasket werden) Smile

Mfg
bitro.de

DAK

BeitragDo, Aug 28, 2014 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleine Frage: wie kommst du 80 MB an JPEGs? 20 MB computererstellte JPEGs sind enorm viel. Das kommt auf rund 24-30 Megapixel. Bei guter Komprimierung sogar noch mehr.

Brauchst du die ganzen Bilder wirklich alle gedreht?

Eventuell könntest du auch parallel nachladen. Wenn du nicht alles ganz von Anfang an brauchst, könntest du jedes Frame ein Bild ein Mal drehen, gerade so dass man es im Spiel nicht merkt.
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragDo, Aug 28, 2014 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm ich hatte Bilder von der NASA benutzt ^^
Also 4000*4000 px xD
bitro.de

Spark Fountain

BeitragDo, Sep 04, 2014 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist zwar schon ein paar Tage her, dass hier zuletzt was geschrieben wurde, aber vielleicht interessiert es dich @Bobo2040 ja noch:

Ich vermute, dass du Weltraumbilder benutzen willst und dann dem Benutzer die Möglichkeit geben willst, sie aus verschiedenen "Perspektiven" zu beobachten bzw. sich eben darin herumdrehen zu können. Falls es so (oder ähnlich) sein sollte und du Blitz3D besitzt, würde ich dir empfehlen, das ganze stattdessen mithilfe von Sprites (LoadSprite) im 3D-Grafikmodus umzusetzen. Da lädst du das Bild einmal als Textur, packst die auf das Sprite und kannst dann die Kamera (CreateCamera) durch die Gegend bewegen. Dann skaliert und dreht sich das Bild automatisch. Very Happy
Gewinner der MiniBCC's #11, #13 und #28
 

Bobo2040

BeitragDo, Sep 04, 2014 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
@Spark Fountain
danke fuer die Antwort aber ich benutze B+ also klappt das so nicht Very Happy
ich denke aber fuer jemand der B3D benutzt ist das ein guter Tipp :p

Mfg
bitro.de

DAK

BeitragDo, Sep 04, 2014 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Sag, verwendest du eigentlich irgendwelche BlitzPlus-Funktionen oder eh nur das Standard Blitz2D? Falls nicht, dann sollte dein Code ohne irgendwelche Änderungen auf Blitz3D laufen. Und Blitz3D ist inzwischen genauso wie BlitzPlus gratis.
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragSa, Sep 06, 2014 0:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@DAK nein ich benutze nur die Standard Funktionen dies in BB auch gibt Smile
Also keine GUI Elemente oder sowas Smile eine GUI benutze ich derzeit nur für den Konfigurationsmanager
Welcher aber getrennt vom Spiel ist ... Aber ich werde das Projekt vorerst auf Eis legen müssen da ich erstmal Java
o.ä lernen muss da ich die Berechnungen usw lieber aufm Server machen würde Weile schlichtweg schneller und unkomplizierter ist... Denn derzeit ist jeder Client zugleich ein Server also über prüft alle Sachen der Gegner etc
Und lässt die Daten Updaten das sollte eig. Hacken sinnlos machen weil die Daten binnen weniger Schleifen Durchgängen wieder zurückgesetzt werden würden... Zieht aber zuviel Leistung Smile
Ist B3D eig. Schneller als BB ? Und wo gibts denn B3D Kostenlos?0.o ich weis nur das B+ 4free ist... Link?Smile

Mfg
bitro.de

Spark Fountain

BeitragSa, Sep 06, 2014 9:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Jein. Der 3D-Grafikmodus von Blitz3D ist in vielen Fällen schneller als die normalen 2D-Befehle (welche sowohl in Blitz+ als auch in Blitz3D enthalten sind). Ansonsten ist Blitz3D aber eher eine "Weiterentwicklung" von Blitz2D, soweit ich weiß. D.h. die Engine basiert ebenfalls auf DirectX 7 und gilt dementsprechend heute als veraltet. Nichts desto trotz läuft fast alles immer noch mit modernen Rechnern und Betriebssystemen.

Ich kann dir also nur empfehlen, wenn du das Projekt doch noch weitermachen willst: Lade dir die kostenlose Version von Blitz3D hier (du musst dort lediglich einen Account erstellen, ist komplett kostenlos). Dann schau dir ein paar grundlegende 3D-Befehle an wie CreateCamera, CreateLight, UpdateWorld und RenderWorld. Schließlich löst du deine Bildrotation mit Sprites, wie schon beschrieben, und alles ist super. Wink
Gewinner der MiniBCC's #11, #13 und #28

DAK

BeitragSa, Sep 06, 2014 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie Spark Fountain schon geschrieben hat ist alles was nicht 3D ist in B3D und B2D weitgehend ident. Du hast die gleichen Befehle, die gleich übersetzt werden und deswegen auch gleich schnell sind. Nur kommen dann noch die 3D-Befehle hinzu, mit denen man einiges besser machen kann als mit den 2D-Befehlen, selbst wenn man im Endeffekt die 3D-Befehle nur für 2D-Bilder verwendet.

Wie machst du deinen Datenversand bisher? Hast du nur 2-Spieler Peer-To-Peer mit Lockstep oder so? Je nach dem wie du deinen Server aufbaust und was du genau synchronisierst kannst du einen riesigen Teil der Daten sparen und das Ergebnis dabei noch besser ausschauen lassen.
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragDi, Sep 09, 2014 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe B3D mal gestestet also habe ein kleines "prog" geschrieben was einfach in einer Schleife von 0 - 10mio eine Zahl Hochzählt und am ende ausgibt ich habe diesen Code 1:1 Kopiert und hatte bei B3D an weitausschlechteres Ergebnis rausbekommen (3x langsamer) Debug war bei beiden ausgeschaltet sowie auch keine anderen Programme an waren ich habe die "tests" mehrfach durchgeführt um sicher zu gehen Smile
Kann man das als vergleichswert nehmen? :O Weil ich meine ich will das Spiel performant halten um eine Hohe FPS Rate auch auf "Holzpcs" zu gewährleisten Smile
Ich habe es nur auf Win XP getestet vllt liegts ja daran was ich aber nicht glaube!

So zur Server Client Kommunikation das ist so aufgebaut:

Client1 (Hp,Sh,Map usw)
Client1\Client2 (Hp,Sh,Map usw.) die Daten von anderen Spielern (eigener Server im prinzip)

Server

Client2(Hp,Sh,Map usw.)
Client2\Client1(Hp,SH,Map usw..)

So ich habe auf meinem PC 4 Leute die "Spielen" diese Daten der Spieler die ich am Anfang bekommen habe nehme ich und speicher sie im Type oClient ab ... alle X Millise´kunden werden die Daten an den Server geschickt, welcher die Daten nur verteilt an alle anderen Clienten und die nehmen die Daten an überprüfen ob das so hinkommen kann (hier treten oft Bugs auf ... z.B. 3 Spieler greifen 1 Spieler gleichzeitig an also ist der Schaden enorm was aber "gekenzelt" wird und der Spieler als "Hacker" abgetan wird :/ ) wenn die daten soweit hinkomen werden sie abgespeichert und auch die eigenen Daten werden überprüft und abgespeichert so kann man seine eigenen Lebenspunkte Schaden etc. nicht so leicht verändern weil sie ca 11-12mal pro Sekunde aktualisiert werden Smile

So hab ich das eigentlich nicht gut durchdacht Very Happy
1. Unperformant
2. Viel zu viel Datennutzung
3. Bugs die sehr schwer und unzuverlässig zu beheben sind!
Der Vorteil daran ist einfach, das fast "unhackbar" von den 0815 Script - Kiddies ist (CE - Gen.)

Jedoch wenn ich so überlege und alles auf dem Server berechnen lasse also Schaden und aktuelle Hitpoints und Schilde dann müsste es eig unmöglich sein zu Cheaten Razz

Einziger Nachteil ist leider das ich kein Java Crack bin und mich da erstmal sehr lange einlesen muss bis ich da was "taugliches" zustande bringen kann :/


Mfg
bitro.de

DAK

BeitragDi, Sep 09, 2014 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@Microbenchmark: solche Winz-Benchmarks, die nur Wert auf einen einzelnen Punkt legen sind nicht sehr aussagekräftig. Kleine Modifikationen könnten es ganz anders aussehen lassen. Dazu kommt, dass du mithilfe der 3D-Befehle die CPU beim Zeichnen stark entlasten könntest, was dir viel Performance gibt, gerade beim Laden.

@Netzwerkarchitektur:
-) Wie genau rennt dein Server? In welcher Sprache ist er geschrieben? Wenn es eine Sprache mit Multithreading ist, nützt du das Multithreading?
-) Was machen deine Clients, wenn sie die Daten nicht schnell genug bekommen? Wie viele ms hast du zwischen dem Senden? Was braucht so lange an der ganzen Sache? das Überprüfen, das Netzwerk oder was anderes?

Selbst wenn du alles auf jedem Client überprüfst sollte das nicht so dramatisch sein. Wie viele Werte sendest du denn pro Client? Kannst du bei den Daten eventuell was einsparen, wenn du unnötige Daten weglässt?
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragDi, Sep 09, 2014 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay ja das dachte ich mir schon Very Happy

ehm multithreaded ist es er läuft auch in Java das hat mir ein "bekannter"
Aus dem Codebot.de Forum geschrieben Smile leider ist er in letzter Zeit nicht mehr Online zwecks Source Code weil deb zu erweitern muesste leichter sein als einen von komplett Null zu programmieren Smile

So bei den Daten kann ich denke mal sehr viel einsparen z.b. Wird immer die aktuelle Map gesendet und welche Konfiguration drinne ist was unnuetz ist Smile aber ich werde eh alles neu ueberarbeiten Smile aber ich lege den Schwerpunkt erstmal auf den Server bzw Java zu lernen Very Happy

Danach der Rest geht ja vergleichsweise "einfach" Very Happy

mfg
bitro.de

DAK

BeitragMi, Sep 10, 2014 7:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Schick mir den Server, ich dekompiliere ihn dir, und schicke dir den Source zurück.
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragMi, Sep 10, 2014 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist wirklich sehr nett gemeint !Smile
Aber leider kenne ich ihn nicht Persönlich und würde ihn davor
lieber Fragen Smile

Mfg
bitro.de

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group