Seite 1 von 2

Srites in Sprite

Verfasst: 12.11.2004 19:19
von Kekskiller
Habe gerade eine kleine Funktion geschrieben, mit welcher man sich das
ständige Laden von Einzelbildern ersparen kann. Man gibt eine Konstante
an, Dateiname und Maskierung und kann danach die einzelnen Bilder per
#Konstante + nächstes Bild an. #Konstante + 0 (also nur die Konstante)
ist das erste Bild, und je nachdem, wie viel man zuaddiert, bekommt man
die anderen, naja. Es lädt alle Bilder aus dem Bild, daher sollte man sich
vergewissern, wie viele Bilder enthalten sind, um die anderen Konstanten
entsprechend auszurichten:

Code: Alles auswählen

Procedure.b LoadAnimSprite(AnimSprite.l,FileName$, TileWidth.l,TileHeight.l, Mode.l, MaskRed.l,MaskGreen.l,MaskBlue.l)
  If FileSize(FileName$) >= 0
    LoadSprite(#TMP_AnimSprite, FileName$, 0)
    widthtiles = SpriteWidth(#TMP_AnimSprite) / TileWidth
    heighttiles =SpriteHeight(#TMP_AnimSprite) / TileHeight
    UseBuffer(#TMP_AnimSprite)
    For zy = 1 To heighttiles
      For zx = 1 To widthtiles
        GrabSprite(AnimSprite + z, (zx-1)*TileWidth,(zy-1)*TileHeight, TileWidth,TileHeight, Mode)
        TransparentSpriteColor(AnimSprite + z, MaskRed,MaskGreen,MaskBlue)
        z = z + 1
      Next
    Next
    ReturnCode = 1
    FreeSprite(#TMP_AnimSprite)
    UseBuffer(-1)
  Else
    ReturnCode =  0
  EndIf
  ProcedureReturn ReturnCode
EndProcedure

Verfasst: 12.11.2004 19:26
von Kaeru Gaman
nice... :D

...kleiner tipp:

wenn du

For zy = 0 To heighttiles-1

schreibst, sparst du dir die subtraktion (zy-1) innerhalb der schleife

...ist in diesem fall irrelevant, kann aber bei performance-kritischem code was ausmachen :wink:

(sorry für das viele editieren... hatte diese post gecrunched... jetzt isse wieder orginol)

Verfasst: 12.11.2004 20:00
von freedimension
Kaeru Gaman hat geschrieben:For zy = 0 To heighttiles-1

schreibst, sparst du dir die subtraktion (zy-1) innerhalb der schleife
Wer sagt dir, dass heighttiles-1 nicht auch jedesmal ausgeführt wird? Ich hab mir das resultierende Assembler jetzt nicht angeschaut, wundern würde es mich aber nicht (zumal hier ja eine Variable im Spiel ist die sich auch wieder ändern könnte.

Besser man packt das ganze dann vor der Schleife in eine Dummy-Variable und benutzt diese für den For-Schleifen-Kopf.

Verfasst: 12.11.2004 20:13
von Kaeru Gaman
stattgegeben. keine weiteren fragen euer ehren.

Verfasst: 12.11.2004 21:28
von Deeem2031
freedimension hat geschrieben: Wer sagt dir, dass heighttiles-1 nicht auch jedesmal ausgeführt wird? Ich hab mir das resultierende Assembler jetzt nicht angeschaut, wundern würde es mich aber nicht (zumal hier ja eine Variable im Spiel ist die sich auch wieder ändern könnte.
:? Hab ich das jetzt falsch verstanden oder meinst du ernsthaft das sich heighttiles ändert wenn man da ein -1 ans ende schreibt?
Das wär ja schrecklich... :freak:

Verfasst: 12.11.2004 21:31
von Kaeru Gaman
nein, er meint , dass im ass-code die berechnung nicht nur 1x sondern jedesmal ausgefürt wird...

also ob die berechnung VOR oder NACH dem schleifen-rücksprung-ziel steht...

Verfasst: 12.11.2004 21:40
von Kekskiller
Also irgendwie arten meine Threads immer in Feinabstimmungsdisskusionen aus :? ...

Verfasst: 12.11.2004 21:43
von Deeem2031
Aso... na dann ist es richtig was Freedimension meint, das wird nämlich immer neu ausgerechnet...

Wär nicht schlecht wenn Fred einen Anhang (wie Step) einbauen könnte, dass man will das der Wert zuerst augerechnet werden würde und nicht immer neu..

Verfasst: 12.11.2004 21:47
von Kekskiller
Das ist eigentlich recht sinnlos, da ich alles im Prinzip auch oben ausrechnen
könnte. Mein Gott, regt euch nicht über das Bißchen -1 auf, das wird
höchstens bei Bildern mit so um 500x500 Pixel was ausmachen...

Ich lebe mit einer ungeheuer lahmen Schrottmühle + Grafikkarte, die ihr
schon längst als Museumsstücke ansehen würdet, glaut mir, die Rechnungen
reichen vollkommen aus.

Verfasst: 12.11.2004 22:12
von Deeem2031
Das heißt aber 1. das du eine Zeile mehr brauchst und 2. noch 4 Byte Ram für die Variable, die ja nicht gebraucht werden wenn das in einem Register gespeichert wird. Außerdem wär es schneller.