Problem mit Funktion

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

tipfehler

Betreff: Problem mit Funktion

BeitragFr, Sep 03, 2004 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe folgende Funktion geschrieben, welche eigentlich ein Bild aufgeteilt in einen Array speichern sollte. Diese will ich benutzen um einen Animierten Charakter zu erstellen. Allerdings wird immer nach dem ende einer Zeile ein leeres Bild in den Array eingefügt, was er eigenlich nicht machen sollte. Was mache ich falsch?
Code: [AUSKLAPPEN]

Function CHARLADEN(CharDatei$, BildX, BildY)

char = LoadImage(CharDatei$)
Dim CharDim((BildY/34+1) * (BildX/24+1))

For Y = 0 To BildY/34
   For X = 0 To BildX/24
      CharDim(i) = CreateImage(24,34)
      CopyRect(X*24, Y*34, 24, 34, 0, 0, ImageBuffer(char), ImageBuffer(CharDim(i)))
      MaskImage CharDim(i), 0,255,0
      i = i + 1
   Next
Next
FreeImage(char)

End Function


Meine Maps lade ich auch so, dort funktioniert alles einwandfrei.

sbrog

BeitragFr, Sep 03, 2004 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube
Code: [AUSKLAPPEN]

Dim CharDim((BildY/34+1) * (BildX/24+1))

sollte
Code: [AUSKLAPPEN]

Dim CharDim((BildY/34) * (BildX/24))


heißen, denn wenn du ein 340 Pixel langes Bild mit 10 Bildern hast, dann brauchest du ein array mit 10 elementen, nichtm mit 11
 

Sebe

BeitragFr, Sep 03, 2004 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

For Y = 1 To BildY/34+1
   For X = 1 To BildX/24+1
      CharDim(i) = CreateImage(24,34)
      CopyRect(X*24, Y*34, 24, 34, 0, 0, ImageBuffer(char), ImageBuffer(CharDim(i)))
      MaskImage CharDim(i), 0,255,0
      i = i + 1
   Next
Next


Versuch mal, die FOR Schleifen bei 1 zu starten und bis zum "richtigen" Ende (was deiner Definition nach ja "BildY/34+1" bzw. "BildX/24+1" ist) laufen zu lassen...
 

tipfehler

BeitragSo, Sep 05, 2004 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt hab ich diesen thread glatt vergessen Embarassed

Zitat:

heißen, denn wenn du ein 340 Pixel langes Bild mit 10 Bildern hast, dann brauchest du ein array mit 10 elementen, nichtm mit 11


das hab ich mir auch gerdacht, wenn ich aber das +1 weg lasse spuckt er mir immer "Array Index Out Of Bounds" aus...

Zitat:

Versuch mal, die FOR Schleifen bei 1 zu starten und bis zum "richtigen" Ende (was deiner Definition nach ja "BildY/34+1" bzw. "BildX/24+1" ist) laufen zu lassen...


Wenn ich es so versuche, dann lässt er mir die rechte Seitedes einglesenen Bildes ganz weg...

Also liegt es wohl auch nciht daran.

Bigmichi

BeitragSo, Sep 05, 2004 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn de ein Bild dazu tust dan schau ich des mal an und kabnn dir esagen was daran net stimmt udn hab keien Lust nen Bild zu suchen deswegen so =) wenn man die Daten alle direkt mitgibt helfen einem viel emhr weil sie den code starten können is auch viel einfacher fidn ich =) also eifnach mal nen bidl un ausführbaren Coded dazu packen und dan auf webspace udn dan lin kgeben =)
 

Edlothiol

BeitragSo, Sep 05, 2004 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum benutzt du nicht einfach LoadAnimImage? Genau für sowas ist es ja da...

Bigmichi

BeitragSo, Sep 05, 2004 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
vielleicht will er ja seine eigene machen um zu verstehen wie es arbeitet =)

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Sep 05, 2004 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn die Bilder 24 *34 groß sein sollen ist das total falsch dimensioniert!

Zitat:
Dim CharDim((BildY/34+1) * (BildX/24+1))

am besten mit HilfsVariablen das ganze erst mal zerstückeln, dann fällt sowas auch auf!
hab das mal gemacht, und sollte auch gehen...Code: [AUSKLAPPEN]
Function CHARLADEN(CharDatei$, BildX= 0, BildY= 0)
   char = LoadImage(CharDatei$)
   
   ; Sicherung
      If ImageWidth  (char) Mod 24 Or ImageHeight (char) Mod 34
         RuntimeError (" bidgröße ist falsch ")
      End If
   
   Bilder_X = ImageWidth  (char)/24
   Bilder_Y = ImageHeight (char)/34
   Dimension = (Bilder_X * Bilder_Y ) -1
   
   Dim CharDim (Dimension)
   
   For Y = 0 To Bilder_Y -1
      For X = 0 To Bilder_X - 1
         CharDim(i) = CreateImage(24,34)
         CopyRect(X*24, Y*34, 24, 34, 0, 0, ImageBuffer(char), ImageBuffer(CharDim(i)))
         MaskImage CharDim(i), 0,255,0
         i = i + 1
      Next
   Next
   FreeImage(char)
End Function
[BB2D | BB3D | BB+]
 

tipfehler

BeitragSo, Sep 05, 2004 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
http://tipfehler.ti.funpic.de/CharLaden.rar so wie gewünscht "funktionierender" Code Smile

Link einfach in den Browser kopieren, dann klappts auch

Bigmichi

BeitragSo, Sep 05, 2004 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
der link geht aber net Wink

rambo256

BeitragSo, Sep 05, 2004 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
das is funpic scheiß Wink
du musst die addresse kopieren und in die addressenleiste einfügen...

zum Problem:
Es gäbe kein Problem,wenn du einfach nuir Loadanimimage benutzen würdest Razz
Asus F53z

Das Leben ist eine reine Konkatenation...

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Sep 05, 2004 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Dim CharDim(0)

Graphics 650,100, 16, 2
SetBuffer BackBuffer()
TFormFilter 0

DimGR = CHARLADEN("RUDRA.PNG", 3, 4); 3 bilder breit und 4 bilder hoch


ClsColor 255,255,255


Repeat
Cls

For i = 0 To DimGR
   DrawImage  CharDim(i), 32*i, 0
Next

Flip
Until KeyHit(1)
End   


Function CHARLADEN(CharDatei$, BildX, BildY)
   char = LoadImage(CharDatei$)
   TileGrX= ImageWidth  (char) / BildX
   TileGrY= ImageHeight (char) / BildY
        DebugLog "TileGrX "+TileGrX
      DebugLog "TileGrY "+TileGrY
   ; Sicherung
       If ImageWidth  (char) Mod  TileGrX Or ImageHeight (char) Mod TileGrY
           RuntimeError (" bidgröße ist falsch ")
       End If

   Bilder_X = ImageWidth  (char)/TileGrX
   Bilder_Y = ImageHeight (char)/TileGrY
   Dimension = (Bilder_X * Bilder_Y ) -1
   
   Dim CharDim (Dimension)
   
   For Y = 0 To Bilder_Y -1
      For X = 0 To Bilder_X - 1
         CharDim(i) = CreateImage( TileGrX,TileGrY)
         CopyRect(X* TileGrX, Y*TileGrY,  TileGrX, TileGrY, 0, 0, ImageBuffer(char), ImageBuffer(CharDim(i)))
         MaskImage CharDim(i), 0,255,0
         i = i + 1
      Next
   Next
   FreeImage(char)
   Return i-1
End Function

12 Bilder = dim Chardim (11)
und nicht 18
dann sind die Bilder 24x32 groß!
nicht 24x34
das erklärt auch die Schwarzen Streifen
einfacher geht es aber mit
Code: [AUSKLAPPEN]
charimage =LoadAnimImage ("RUDRA.PNG",24,32,0,12)
MaskImage charimage, 0,255,0
For i = 0 To 11
   DrawImage  charimage, 32*i, 100,i
Next
[BB2D | BB3D | BB+]
 

tipfehler

BeitragMo, Sep 06, 2004 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz großes DANKESCHÖN! Very Happy

Ich wollte einfach mal eine alternative zu LoadAnimImage benutzen. Zum einen um zu schauen ob das auch geht, zum anderen weil ich etwas gesucht hab um meine Bildgröße frei zu variieren. Wobei ich jetzt einsehe, das ich bei LoadAnimImage genauso den Befehl Scalimage verwenden hätte können....

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group