Srites in Sprite

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Srites in Sprite

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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)
Zuletzt geändert von Kaeru Gaman am 13.11.2004 00:15, insgesamt 4-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag 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.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

stattgegeben. keine weiteren fragen euer ehren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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:
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Beitrag von Kekskiller »

Also irgendwie arten meine Threads immer in Feinabstimmungsdisskusionen aus :? ...
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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..
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten