Copyimage... Ich versteh das nicht.
Übersicht

![]() |
KabelbinderSieger des WM-Contest 2006Betreff: Copyimage... Ich versteh das nicht. |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Wer nochmal auf's Klo muss, sollte jetzt gehen, das ist nämlich ne lange Geschichte. ![]() 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 ![]() Copyimage kann ich also knicken ![]() Andererseits, so hab ich mir mal überlegt, sind alle erforderlichen Bilder ja auch schon im Speicher und müssen nicht mehr verändert werden ![]() 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 ![]() ![]() BITTEBITTEBITTE |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, das geht....
CopyImage erstellt ein neues Bild, das gleich wie das alte ist, aber es ist "eigenständig".... |
||
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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... |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Cooäl! Thx! | ||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group