Texturen zuweisen

Previous topic - Next topic

WPShadow

Hi!

Ich wollte mal eine theoretische Frage stellen:

Nehmen wir an, ich habe folgende Programmaufstellung:

Code (glbasic) Select
DIM a[3]
DIM b[3]

FOR tmp = 0 to 2
    a[tmp] = tmp
    b[tmp] = tmp
NEXT

LOADSPRITE "bla.png", a[0]
LOADSPRITE "hui.png", b[0]

usw.
Bei einem, diesem dort oben, sehr ähnlichen Beispiel hatte ich das Problem, daß mir bloß jedes Mal "hui.png" ausgegeben wurde, obwohl ich SETTEXTURE a[0], -1 angegeben hatte.

Irgendwer eine Idee?

Gruß

W.

PS.: Mir ist natürlich klar, dass ich beiden Variablen den selben Wert zuweise. Ist es dann so, daß a[0] einen Wert bekommt und b[0] den Wert a[0] überschreibt? Denn falls ja, dann muß ich meine halbe Programmstruktur umschreiben.

PPS.: Bis zu welcher Höhe können Zuweisungen zahlentechnisch gehen? Damit meine ich sowas wie: LOADSPRITE "asd.asd", 10000 <-- Ist ein solcher Wert überhaupt möglich?

PPPS.: Hilft es vielleicht bloß eine mehrdimensionale Variable zu schreiben? Worin liegt dann der Unterschied von
a[1][0] = 1
a[0][1] = 1
Würde mir das System die selbe identische Textur anzeigen?
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Schranz0r

Tja W.

A[0] = 0
A[1] = 1
A[2] = 2
...
B[0] = 0
B[1] = 1
B[2] = 2

Muss ich noch mehr dazu sagen ?
Wenn du das so hast :

LOADSPRITE "bla.png", 0
LOADSPRITE "hui.png", 0

Zählt immer das als letztes geladene Sprite!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Tja, dann bleibt bloß noch die Frage, wie ich das umbaue...

Danke, übrigens! Damit habe ich zumindest schon mal die Möglichkeit die GLDB einzubauen... =)
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Quentin

Gernot hatte das schon mal irgendwo gepostet. Schreib dir einfach eine Funktion, die die Spritenummern hochzählt

z.b.

Code (glbasic) Select
function newsprite:
   static spritenr
   inc spritenr, 1
   return spritenr
endfunction
Die Zuweisung dann einfach immer mi Funktionsaufruf

A[0] = newsprite()    // = 0
A[1] = newsprite()    // = 1
B[0] = newsprite()    // = 2

usw.

kannst die Grafik ja auch gleich laden lassen innerhalb der Funktion, wenn du magst


achja, hier das Teil von Gernot:
http://www.glbasic.com/forum/viewtopic.php?id=177

WPShadow

Das ist super! Genau danach habe ich gesucht! =D

Damit sind jede Menge Probleme gelöst! Danke...
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Schranz0r

Oder:


Code (glbasic) Select
FUNCTION SpriteLoad: Name$
LOCAL num,XX,YY
    GETSPRITESIZE num, XX, YY
    WHILE XX <> 0
        INC num,1
        GETSPRITESIZE num, XX, YY
    WEND
    LOADSPRITE Name$, num
    RETURN num
ENDFUNCTION
Also:

File[0] = SpriteLoad("test.png")
File[1] = SpriteLoad("test2.png")

Vorteil:

Keine Globale !!!!
Gut, beim Quentin auch, aber ist halt Geschmackssache...
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Ich teste mal beide Möglichkeiten! =D

Quentins Variante funzt bis jetzt ziemlich gut, heute Nachmittag ist deine dran, Schranzi! =)
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Quentin

Funktionieren werden beide.

Schranzors Methode hat den Vorteil, daß man sicher sein kann, keine schon belegte Spritenummer zu überklatschen. Das ist bei meiner Variante nicht so, nur, wenn man die Spritenummern ausschließlich über diese Funktion vergibt. Da kann man ja aber nie sicher sein ;)

WPShadow

Jetzt noch eine Frage:

Eine Textur entladen läuft wie? Oder macht es da mehr Sinn, einfach das Ding zu überschreiben???

Und noch was: So, wie ich das gesehen habe, kann man ja theoretisch so auch (mit Dim usw.) dynamisch viele Objekte und Texturen laden, oder??? Damit meine ich, daß man keine fix gesetzten Grenzen hat, außer vielleicht den Arbeitsspeicher des Rechners...
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Quentin

Sprite freigeben geht mit

LOADSPRITE "", spritenr

Beispiel:
Code (glbasic) Select
LOADSPRITE "grau.bmp", 1

DRAWSPRITE 1, 100, 100
GETSPRITESIZE 1, sx, sy
PRINT "Breite: " + sx + " Höhe: " + sy, 0, 0
SHOWSCREEN
MOUSEWAIT

LOADSPRITE "", 1
GETSPRITESIZE 1, sx, sy
PRINT "Breite: " + sx + " Höhe: " + sy, 0, 0
SHOWSCREEN
MOUSEWAIT

END

WPShadow

Das schon! Ich frage mich halt nur, ob ich den gesamten Bereich wieder runter reduzieren muß...

1 2 3   5 6 --> 1 2 3 4(5 - 1) 5(6 - 1)

Also, wenn die Textur Nr. 4 entladen wurde.

Andererseits ist Schranz0rs Code ja so ausgelegt, daß er mir beim nächsten Laden die Lücke bei 4 ja wieder ausfüllen würde, oder?
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Quentin

wie du schon sagtest, mit Schranzors Methode werden auch die Lücken wieder gefüllt. Das Teil zählt ja immer von Nummer 0 hoch, bis es eine freie Spritenummer findet.

WPShadow

Dann werde ich wohl wirklich seine Methode verwenden, denn die ist so wirklich am optimalsten...
Code (glbasic) Select
FUNCTION SpriteUnload: Name$
local num
    num = Name$
    LOADSPRITE "", num
    RETURN num
ENDFUNCTION
So sollte das doch funktionieren, oder? Brauche ich dann eigentlich noch das RETURN? Normalerweise nicht, oder? <-- (sehr viele ODERs drin)
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Quentin

*ggg* du hast einen Hang zu polnischen Grenze, Oder?

eine Funktion SpriteUnload ist wenig sinnvoll, weil LOADSPRITE "", spritenr ja vollkommen ausreicht. Beim nächsten Aufruf von Schranzors Funktion kann diese Nummer ja dann wieder verwendet werden.

WPShadow

Stimmt schon! =)

Das Problem ist nur, daß ich etwas größer plane. Die Idee ist, das gesamte Objekt aus meiner (halbfertigen) GLDB zu laden und per Schleifen zu jagen. In den Schleifen werden Objekte, Texturen & Bumps geladen. Ausgegeben wird das Ganze dann in Komination + Newton Grundmodell, das natürlich auch schon geladen ist.

Deshalb dachte ich daran, es eben so zu lösen, da es ansonsten ziemlich schwierig wird, das Ganze über eine Schleife zu entladen...
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est