Ein Paar grundlegende Inventarprobleme
Übersicht

InsoBetreff: Ein Paar grundlegende Inventarprobleme |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
huhu! Ich schon wieder ;D
Hab jetzt die ganze Mapsache erstmal einwenig hinten an gestellt, und wollte erstmal mit dem Hauptprogramm weiter kommen, da hab ich mir gedacht "Hey! Inventar! Klingt einfach! Denkste! Wobei.. es IST einfach, allerdings gibts einige Punkte die ich nicht so richtig lösen kann. Hier erstmal ein Link(screenshot). Mein Inventar hat 32 Slots(Array), momentan überprüf ich bei jedem slot erstmal ob der Slot überhaupt irgendwie gefüllt ist, wenn ja wird der slot mit dem jeweilig zu dem Item passenden Bild gefüllt. Code: [AUSKLAPPEN] Function showInventory()
DrawImage guiInventory,0,0,0 If inventarContent(1,1) <> 0 pickItemInventory(inventarcontent(1,1)) DrawImage inventorySymbol,678,623 endif End Function Function pickItemInventory(iid) If iid = 2 Then inventorySymbol = LoadImage("data/gui/wood.jpg") End Function Jetzt sieht man schon 2 Probleme: Das Bild des InventarItem-Symbols wird mit fixen Koordinaten auf das Inventar gemalt, was bei verschiedenen Auflösungen jetzt schonmal Mist ist(muss ich wirklich für jede mögliche auflösung, für jedes inventarsymbol die koordinaten raussuchen?). Zum anderen wird für jeden Frame wenn das Inventar läuft, jedes Inventar Bild neu von der Festplatte geladen, allerdings weiß ich nicht wie ich das eleganter lösen soll(hab wahrscheinlich nur Tomaten auf den Augen). Hat jemand Lösungsansätze wie ich das Inventar etwas eleganter lösen kann? |
||
Seven |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zum ersten Problem;
Dein Inventar und damit auch der Inhalt werden ja nicht zufällig dort hingemalt, nicht wahr? Du hasst dir diesen Platz nach bestimmten Gesichtspunkten ausgesucht. Von daher bietet sich eine Formel dafür an. Am Anfang sieht das so aus: BlitzBasic: [AUSKLAPPEN]
Aus diesen Werten lassen sich Größe und Position vom Inventar Inhalt und vom Rest berechnen. Damit ist man letztendlich bei jeder Auflösung sicher:) Zum 2. Problem; Vielleicht verstehe ich das ganze falsch, aber wieso hast du extra eine Function ![]() Bildes? Naja, dass tut erstmal nichts zur Sache. Das Bild würde ich vor dem Hauptteil deines Programms laden und dafür eine Variable setzten. Dann muss das Bild nur einmal geladen werden und für den Rest verwendest du die Variable. |
||
Inso |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, dass ich die 2D BB Funktionen benutzt hab.. ist ewig her.
Gar nicht ausprobiert ob guiWood=loadimage("wood.jpg") inventorySymbol = guiWood klappt ![]() das würde das ganze natürlich so ermöglichen wie ich es bereits angefangen habe. Naja zum ersten Problem, angenommen der Spieler will dann eine andere Auflösung, dann muss ich ja theoretisch auch für diese auflösung den inventar hintergrund haben, dadurch verschiebt sich das ganze ja auf irgendeine art und weise, und die Symbole der jeweiligen items müssen dementsprechend mit verschoben werden, wie finde ich allerdings, egal welche auflösung benutzt wird die richtige position? die funktion ist übrigens dafür da, dass ich nicht für jeden einzelnen inventoryslot nochmal den ganzen code für jedes im spiel existierende item kopieren muss, was schwachsinn wär ![]() das loadimage dadrin, war mangelnde kompetenz meinerseits, siehe oben(inventorySymbol = guiWood) |
||
![]() |
Lakorta |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] GFX_X = 800 So zum Beispiel. Du hast die Größe des Bildschirms un GFX_X und GFX_Y gespeichert (am besten als Konstante (const) deklarieren) und rechnest die Position des Bildes aus, in dem du mit disen beiden Werten rechnest. Wenn man nun GFX_X und GFX_Y ändert, sollte die Position des Bildes sich nicht ändern (im Beispiel bleibt das Bild in der Mitte des Bildschirms, egal welche Auflösung). |
||
--- |
Inso |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich versteh das ganze schon, allerdings verändert sich ja auch die größe der Symbole die auf die Gui gezeichnet werden, und dementsprechend auch die abstände zwischen den Symbolen.
Meine momentane idee ist es die positionen je nach gewählter Auflösung manuell zu setzen, was aber viel aufwand bedeutet. Aber auch mit euren hinweisen fällt mir leider keine alternative ein, die ich auf der basis von einmaligem ablesen der nötigen koordinaten bei jedem der 32 symbole nutzen kann :/ |
||
Seven |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nagut; So habe ich mir das in etwa vorgestellt:
BlitzBasic: [AUSKLAPPEN]
Durch das "RX - Width" bekommst du immer die richtige Position des Inventars. Das Inventar wird auch Skalliert, je nachdem, wie man es haben will. Für die Positionen im Inventar ist folgendes wichtig: Du musst wissen wo das Inventar anfängt. Sowohl in der Höhe, als auch in der Breite und das wird ja oben ausgerechnet. Dadurch kann man sich ausrechnen, wie breit und hoch ein Feld ist. Aus diesen 2 Werten lassen sich Kordinaten machen. Das wichtigste sind eigentlich die Anfangskordinaten im Inventar. Die restlichen erschließen sich daraus. |
||
Inso |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Klingt zwar auf den ersten Blick nach einer guten Lösung, aber das ScaleImage passt mir so noch nicht ganz. Wenn dann müsste ich mein Orignal-hochauflösendes Bild nehmen, und kleiner machen, je nach auflösung. ich lass mir das ganze mal durch den kopf schwirren, danke jedenfalls für die Antworter ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group