Ein Paar grundlegende Inventarprobleme

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Inso

Betreff: Ein Paar grundlegende Inventarprobleme

BeitragFr, Dez 02, 2011 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 02, 2011 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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]

RX = 800
RY = 600
Graphics3D RX, RY


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 zum laden eines
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

BeitragFr, Dez 02, 2011 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, dass ich die 2D BB Funktionen benutzt hab.. ist ewig her.
Gar nicht ausprobiert ob

guiWood=loadimage("wood.jpg")
inventorySymbol = guiWood klappt Very Happy
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 Very Happy
das loadimage dadrin, war mangelnde kompetenz meinerseits, siehe oben(inventorySymbol = guiWood)

Lakorta

BeitragFr, Dez 02, 2011 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
GFX_X = 800
GFX_Y = 600
Graphics3D GFX_X, GFX_Y, 16, 1

;restlicher Code

While Not KeyHit(1)
DrawImage(Bild, GFX_X / 2, GFX_Y / 2)
Wend


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

BeitragFr, Dez 02, 2011 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 02, 2011 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Nagut; So habe ich mir das in etwa vorgestellt:

BlitzBasic: [AUSKLAPPEN]

RX = 1200
RY = 700

Graphics RX,RY

Inventar = LoadImage("Bild.png")

Width = 100 ;Breite des Bildes
Height= 100 ;Höhe des Bildes

XScale = RX / Width * 10 ;Eine kleine Rechnung, um die Skrallierung
YScale = RY / Height* 10 ;für das Bild je nach Auflösung herauszufinden.

ScaleImage Inventar, XScale, YScale ;Skrallierung des Inventars

;Im Hauptprogramm heißt es dann:
DrawImage Inventar, RX - Width * XScale, RY - Height * YScale


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

BeitragFr, Dez 02, 2011 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group