Der Grund, warum es mich etwas stört ist, dass ich in meinem Spiel ausschließlich PNGs verwende (ich zeichne mit Inkscape) und das Erstellen mittlerweile eine ganze Weile dauert - und das auf einem doch recht aktuellen System
![Wink ;-)](./images/smilies/icon_wink.gif)
Sie kann schon nur würde damit dein Spiel In-Game locker 3x solange zum Laden der Grafiken und Räume brauchen. Und da ist es doch besser lieber du wartetest als das deine Spieler die Wartezeit abbekommen.Hat das einen speziellen Grund, dass die Engine nur JPEGs laden kann?
die es aber nicht geben wird.. ich dachte eigentlich das Argument der 3-fachen Ladezeiten würde für sich sprechen völlig unabhängig von Dateigrößen und Unterschieden die man nur wahrnimmt wenn man längere Zeit und sehr Nahe sich die Grafiken anguckt... KEIN NORMALER Spieler wird das aber tun. Aber überlange Ladezeiten DAS fällt Leuten auf.Würde diesbezügliche Einstellmöglichkeiten also auch begrüßen.
Ich arbeite auch mit 320*240, konnte aber derartige Effekte noch nie beobachten. Ich verwende für Objekte und sowas immer PNG, aber wenn die PNG vorher scharfkantig war, ist sie das auch nachher und wenn sie nen Verlauf hatte, hat sie den auch nachher. Mir ist nichts aufgefallen.Lachi wrote:bei meinem Spiel mit 320*240er Auflösung sah es durch die Kompression plötzlich so aus, als hätte mein zusammengepixelter Charakter plötzlich Akne bekommen.
Tut mir leid, ich habs wirklich versucht. Aber ich sehe keinen Unterschied!Benni wrote:Über die Kompressionsartefakte würde ich mich übrigens auch nicht beschweren, wenn sie nicht ziemlich ins Auge fallen würden. Ich weiß, dass das bei anderen Grafikstilen nicht der Fall ist - für Fotos sind JPEGs super - aber hier ist es einfach nur hässlich. Ein Beispiel aus einer Comic-Zwischensequenz:
Danke...Schiman wrote: @Benni: Natürlich gibt es einen Unterschied zwischen dem JPEG und PNG bei deiner Beispielgrafik, aber der ist so gering, dass ich als Spieler das wirklich nie bemerkt hätte.
Und danke...Tut mir leid, ich habs wirklich versucht. Aber ich sehe keinen Unterschied!
Ich finde, man sieht recht deutlich an den Rändern, vor allem beim A und beim Ausrufezeichen, dass dort ein dunkler ausgefranster Rand entsteht und außerdem ist das Rot insgesamt dunkler und mit hellen und dunklen Flecken übersät. Aber da es außer mir hier niemandem sonderlich aufzufallen scheint, ist es wohl wirklich nicht so schlimm.Hexor wrote:Tut mir leid, ich habs wirklich versucht. Aber ich sehe keinen Unterschied!
Ah, danke für die Erklärung! Ich wusste nicht, dass man den Alphakanal erst trennen muss. Ich dachte immer, RGBA würde direkt von OpenGL unterstützt werden. Aber wahrscheinlich machst du noch von der Engine selbst her Abfragen auf den Alphakanal, um durch transparente Teile eines Objekts hindurchklicken zu können, da hatte ich nicht dran gedacht.Zimond wrote:Und nein, es liegt nicht an der Dateigröße. Die lange Zeit entsteht durch das trennen vom normalem Bild zum Alphakanal, die, um als Textur geladen werden zu können, einzeln geladen werden müssen. Die Dateigröße ist dabei wurscht, da zählt nur die Auflösung und die ist Formatunabhängig gleich beim selben Bild. Deswegen wird ja beim Spielerstellen getrennt und die beiden Teile (RGB + Alpha) als zwei JPGs gespeichert die zusammen IMMER sehr viel schneller laden als ein PNG.
Und ich habs tatsächlich in Sekunden gemessen mit einem absichtlich überfüllten Raum.
wollt ich auch nur noch mal bestätigen.HeXoR wrote:
Tut mir leid, ich habs wirklich versucht. Aber ich sehe keinen Unterschied!
Einfach? OK. nehmen wir mal an das Spielerstellen läuft in einem eigenem Thread.. und während dessen änderst du was im Spiel und zack ist das erstellte Spiel durcheinander. Dazu müsste man schon eine komplette Kopie aller Spieldaten erstellen aus denen dann das Spiel erstellt wird womit dann aber jede Zeitersparniss hinfällig wäre. Dein zweiter Vorschlag is eher denkbar aber wie du sagtest nicht mal eben gemacht.Könntest du aber vielleicht über einfaches Multithreading beim Konvertieren nachdenken?
Code: Select all
Mutex m
List images
function worker()
{
loop forever
{
m.lock()
if (images.empty)
{
m.unlock()
return
}
img = images.getFirstEntry()
images.removeFirstEntry()
m.unlock()
convertToJPEG(img)
}
}
function createGame()
{
List threads;
for i=1 to num_threads
{
Thread t = startThread(worker)
threads.add(t)
}
for each t in threads
{
joinThread(t)
}
}