Copyimage... Ich versteh das nicht.

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Kabelbinder

Sieger des WM-Contest 2006

Betreff: Copyimage... Ich versteh das nicht.

BeitragSo, Feb 20, 2005 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Wer nochmal auf's Klo muss, sollte jetzt gehen, das ist nämlich ne lange Geschichte. Smile .

Bei meinem Spiel, das ich gerade porgrammiere sind viele Gegner animiert und drehbar. Außerdem hat jeder Gegner 2 verschiedene Animationen:
Eine normale, wo er noch so rumchillt und eine Kampf-Animation. Die Bilder dazu werden in Dreidimensionalen Dim-Feldern gespeichert

Bei vielen Gegner ist jedoch die Chill-Animation die selbe, wie die Kampf-Animation. Da läge es eigentlich nahe, CopyImage zu verwenden.

Ich habe dafür mal einen kleinen Zeittester gebaut, mit dem ich die Zeit, die das verbraucht messen kann:

Code: [AUSKLAPPEN]
Graphics 640,480,16,2

a = CreateImage(100,100)
SetBuffer ImageBuffer(a)
Color 255,0,0
Rect 20,30,50,30
Color 0,255,0
Rect 50,40,40,70
Color 255,255,0
Oval 70,10,20,30
Color 0,0,255
Oval 30,60,60,20

Color 255,255,255
SetBuffer FrontBuffer()

Const max = 1000
Dim pic(max)

timer = MilliSecs()
For i = 0 To max
pic(i)=CopyImage(a)
Next
ex = MilliSecs()-timer

Print "finish"
WaitKey

DrawImage pic(0),0,0
Print ex

WaitKey
End


Das seltsame Ergebniss ist:

Bei 1000 Bildern dauert das nur ca 70 Millisekunden, aber z.B bei 3600 Bildern (3,6 mal sovielen) dauert es über 10000 Millisekunden.

Leider handelt es sich bei der Bildanzahl in meinem Spiel nicht um solche Peanuts, wie 1000 Bilder Sad . Wenn ich das mit dem CopyImage in den Quelltext einbaue, dauert der Ladevorgang statt 25 Sekunden 150 Sekunden --> VIEL ZU LANG!!!!

Copyimage kann ich also knicken Sad .


Andererseits, so hab ich mir mal überlegt, sind alle erforderlichen Bilder ja auch schon im Speicher und müssen nicht mehr verändert werden Smile .

Wenn man ein Bild läd:

Code: [AUSKLAPPEN]
bild = LoadImage("Smiley.bmp")

ist die Variable bild doch eigentlich nur der Code, mit dem man das Bild im Speicher ansprechen kann. Folglich müsste man doch irgendwie schreiben können:
Code: [AUSKLAPPEN]
bild = LoadImage("Smiley.bmp")
anderesbild = bild

Dann ist anderesbild der selbe Ansrechcode, wie Bild, also müsste man anschließend schreiben können:
Code: [AUSKLAPPEN]
DrawImage anderesbild,x,y

Und dann müsste das selbe rauskommen, wie bei
Code: [AUSKLAPPEN]
DrawImage bild,x,y



Geht das Surprised ? Das würde meine SpeicherProbleme lösen Very Happy .

BITTEBITTEBITTE
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

simi

BeitragSo, Feb 20, 2005 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, das geht....

CopyImage erstellt ein neues Bild, das gleich wie das alte ist, aber es ist "eigenständig"....
 

OJay

BeitragSo, Feb 20, 2005 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
die performanceprobleme werden höchstwahrscheinlich von deiner grafikkarte herrühren. 3600 bilder entsprechen bereits 53MB (nach dem win-taskmanager), hast du nun nur 32mb grafikspeicher, müssen die überschüssigen images in den systemspeicher ausgelagert werden -> langsam.

bei mir blieb die testzeit auch bei 5000 images unter 5 sekunden...128mb grafikkarte...

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Feb 20, 2005 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Cooäl! Thx!
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Feb 20, 2005 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
WOW, ich hab CopyImage yetzt fast ganz aus meinem Quelltext verbannt und das hat die dauer des Ladevorgangs von 25 Sekunden auf 15 Sekunden verkürzt! Very Happy .
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group