GLBasic forum

Other languages => GLBasic - de => Topic started by: WPShadow on 2008-Jan-16

Title: Texturen zuweisen
Post by: WPShadow on 2008-Jan-16
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?
Title: Texturen zuweisen
Post by: Schranz0r on 2008-Jan-16
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!
Title: Texturen zuweisen
Post by: WPShadow on 2008-Jan-16
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... =)
Title: Texturen zuweisen
Post by: Quentin on 2008-Jan-16
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
Title: Texturen zuweisen
Post by: WPShadow on 2008-Jan-16
Das ist super! Genau danach habe ich gesucht! =D

Damit sind jede Menge Probleme gelöst! Danke...
Title: Texturen zuweisen
Post by: Schranz0r on 2008-Jan-16
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...
Title: Texturen zuweisen
Post by: WPShadow on 2008-Jan-17
Ich teste mal beide Möglichkeiten! =D

Quentins Variante funzt bis jetzt ziemlich gut, heute Nachmittag ist deine dran, Schranzi! =)
Title: Texturen zuweisen
Post by: Quentin on 2008-Jan-17
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 ;)
Title: Texturen zuweisen
Post by: WPShadow on 2008-Jan-17
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...
Title: Texturen zuweisen
Post by: Quentin on 2008-Jan-17
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
Title: Texturen zuweisen
Post by: WPShadow on 2008-Jan-17
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?
Title: Texturen zuweisen
Post by: Quentin on 2008-Jan-17
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.
Title: Texturen zuweisen
Post by: WPShadow on 2008-Jan-17
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)
Title: Texturen zuweisen
Post by: Quentin on 2008-Jan-17
*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.
Title: Texturen zuweisen
Post by: WPShadow on 2008-Jan-17
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...
Title: Texturen zuweisen
Post by: Schranz0r on 2008-Jan-17
Garnicht entladen und einfach überschreiben?
Title: Texturen zuweisen
Post by: WPShadow on 2008-Jan-17
Stimmt natürlich!

Aber auf deine Art funzt das nicht ganz, denn er erhöht einfach immer weiter! Deshalb habe ich einfach eine kurze UNLOAD - Funktion geschrieben, die ich kurz drüber laufen lasse. Das geht dann schon...

Bin ziemlich dankbar für die Funktion! Die ist nämlich genial...