Stacking im Inventar

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

EwokonCrack

Betreff: Stacking im Inventar

BeitragMi, Apr 22, 2009 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo erstmal!

Mein eigentlich erstes Projekt in BB ist ein 2D-RPG. Ich hab mir für den Anfang viel vorgenommen - klar - aber ich bin eben so. Dementsprechend würde ich sowas wie nehm dir doch erstmal was einfacheres vor nicht hören wollen. Es klappt alles ganz gut, ich kann monster töten die dann nach kurzer Zeit wieder erscheinen, bekomme dafür Erfahrung und Geld von dem ich mir neue Waffen oder z.B. Tränke und Pfeile kaufen kann. Auch Aufgaben von Passanten in der Stadt muss ich schon erledigen Smile

Hier kommt das Problem: Wenn ich neue Waffen kaufe landen diese ersteinmal im Inventar. Das selbe geschieht mit eventuell gefundenen Sachen oder Dingen die die Monster nach ihrem Ableben verlieren. Ich kann natürlich jedem Item seinen Platz zuweisen und direkt die Koordinaten angeben an denen ich es malen will, so läuft es im Moment auch. Allerdings habe ich dann irgendwann mal alle Tränke und Pfeile aufgebraucht, aber noch eine starke Waffe dabei die einen Platz recht weit unten hat. Nun sieht das alles sehr merkwürdig aus Very Happy

Meine Frage: Wie kann ich den Gegenständen ihren Platz so zuweisen, dass er immer nach dem vorigen belegten Slot liegt?

Bitte anfängerfreundlich antworten damit auch ich es verstehe Laughing Wink

Liebe Grüße, Suggah

Xeres

Moderator

BeitragMi, Apr 22, 2009 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie sollte dir jemand ein Tipp geben ohne zu wissen wie du die Items momentan handhabst?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ComNik

BeitragMi, Apr 22, 2009 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
also hallo erstmal
aus dem bauch heraus würd ich dir folgendes vorschlagen:

Angenommen du hast 9 Slots...
1. Jeder Slot bekommt seine X,Y variablen... würd ich alles in einem type speichern
2. jeder Slot bekommt eine Variable ob er besetzt ist oder nicht. auch in nen type
3. wenn du einen trank aufnimmst kommt er ja in den ersten Slot, diesem Slot musst du dann auch zuweisen das er belegt ist (slot\belegt =1 oder so)

4. Bei jedem Item was du aufnimmst, machst du eine schleife durch alle Types, und sobald ers einen Type gefunden hat dessen 'belegt' Variable = 0 ist, zeichnest du das objekt an den jeweiligen Slot korrdinaten (slot\x#,slot\y# z.B)

Wie gesagt nur bauchgefühl, gibt bestimmt schnellere und bessere Methoden.
Viel erfolg noch
ComNik
WIP: Vorx.Engine

Skabus

BeitragMi, Apr 22, 2009 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Also soweit ich es verstehe,willst du, dass die Items entsprechend ihres Vorhandenseins nacheinander
angezeigt werden...

Das kommt im Grunde darauf an, wie du dein Itemmenü organisiert hast.Nen Bild wäre sicher net schlecht Wink

Ich geh mal davon aus, dass du ein Raster aus gleichgroßen Kästchen hast.In jedem Kästchen wird
dann quasi ein Item bzw. ein Ttemtyp gelegt(z.B. Pfeile,Schwert, Pinguin, etc.).

Jetzt kommt es wie gesagt darauf an, wie du deine Items programmiert hast.
Ich machs immer so, alle Dinge von denen ich nich weiß was der Spieler im moment bei sich hat/gemacht/gelernt hat pack ich in einen Type rein.

Das hat den Vorteil, dass ich dann per For...Each-Schleife durch mein Inventar gehen kann und dann alle
Items nacheinander anordnen kann.

Kleines Beispiel.Items sehen bei mir meistens so aus(stark vereinfacht):

Code: [AUSKLAPPEN]


Type item

Field name$
Field anzahl%
Field bild

End type



Dann lassen sich Items bequem und sauber erstellen.
Dann kannst du wie gesagt wenn du deine Items anzeigen willst per For...Each-Schleife durch
all deine Items gehen und sie nacheinander anzeigen lassen.

Selbstredend musst du das Item per Delete entfernen wenn die Anzahl auf 0 sinkt Wink

Hoffe ich konnte helfen^^

MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu
  • Zuletzt bearbeitet von Skabus am Mi, Apr 22, 2009 16:40, insgesamt einmal bearbeitet
 

matze-t

BeitragMi, Apr 22, 2009 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ich machen würde:
Speicher alle Items, also Tränke und so weiter in Types. Wenn du die dann malst, gehst du alle durch. Das erste Item zeichnest du in den 1. Slot, das 2. in den 2. usw. Wenn du wissen musst wo jedes Item liegt, kannst du die Info ja beim Zeichnen speichern.
Keine Ahnung ob das mit deinem System funktioniert. So würds ich machen, nach den Infos die du bis jetzt gegeben hast.

ComNik

BeitragMi, Apr 22, 2009 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube sein Problem ist, dass er zum Beispiel einen trank hat im ersten Slot, und ein schwert im zweiten.
wenn er den Trank jetzt trinkt, wird der erste Slot leer aber der zweite ist voll, und das sieht doof aus.

Aber wie gesagt ohne beispiel gibts nur bauchgefühl Wink
lg
WIP: Vorx.Engine

Silver_Knee

BeitragMi, Apr 22, 2009 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Da er sich als Anfänger outete hab ich gerade ein Array vor Augen, bei dem das Erste Item verbraucht wurde und die Anderen nicht nachrücken wollen.
Dafür wäre die Lösung, eine for-Schleife, die ab dem genutzten Item alle folgenden eins nach vorne verschiebt, indem es immer Array(x)=Array(x+1) macht und das letzt ist dann zum löschen frei gegeben.
 

EwokonCrack

BeitragMi, Apr 22, 2009 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein problem ist nicht dass die items nicht nachrücken; das problem ist dass ich jetzt jedem item einen platz zugewiesen habe. also jetzt bildlich:

item 1 = slot 1
item 2 = slot 2
item 3 = slot 3

wenn ich jetzt aber zuerst nummer 3 aufsammele dann landet dieses in slot 3. es soll aber in dem ersten slot der frei ist landen.
 

Kruemelator

BeitragMi, Apr 22, 2009 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Dim slot(99)


For platz=0 To 99
   If slot(platz) = 0 Then
      slot(platz) = 1
      itemsplatz = platz
      Exit
   EndIf
Next


das sollte eigendlich funktionieren

Gruß Kruemelator

Tennisball

BeitragMi, Apr 22, 2009 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Du überpfrüfst einfach, welcher Slot frei ist und erstellst dann eine Variable, in der eben genau das drin steht.

also bei einem Array z.B.:
Code: [AUSKLAPPEN]
Global Inventar[anzahlSlots]

;...

Local freeSlot
For i = 0 to anzahlSlots
   If Inventar[i] = 0 Then freeSlot = i : Exit
Next


Code nicht getestet.
Sollte klappen


Edit: Mist, zu langsam Surprised

ComNik

BeitragMi, Apr 22, 2009 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich darf auf mein Beispiel weiter oben verweisen? Wink

Also lass das mit item = slot. Meine Meinung...
Nutz Types für Items.
Code: [AUSKLAPPEN]

  type item
    field x#
    field y#
    field name$
   end type


und dann (um Items anzuzeigen):
Code: [AUSKLAPPEN]

    if player_sprichs_mit_dorfbewohner() = 1 then
      item.item = new item
        item\x# = <beliebige stelle>
        item\y# = <beliebige stelle>
        item\name$ = "DIE_TOLLE_BELOHNUNG"
    end if
 
       


achso man sollte beim erstellen von items natürlich gucken, dass man sie nur anzeigt, wenn sie auch im Sichtbereich de Spielers sind...
Code: [AUSKLAPPEN]


    for item.item = each item
      ;Hier sollte eine Abfrage stehen ob das item im sichtfeld ist ;)
     select item\name$
       case "Trank"
         DrawImage trank,item\x#,item\y#
       ;case usw...
     ...
     end select
   


wie immer gibt es auch hier eine schnellere methode um die Performance zu verbessern.

Soviel zum (rudimentären) Item System...
nun zu den slots...

die fiktive funktion player_sammelt_objekt() gibt z.B den item\name$ des eingesammelten objekts wieder.
Code: [AUSKLAPPEN]

   for item.item = each item
     ;Hier die Abfrage um zu gucken ob es im sichtfeld ist...
  if player_sammelt_item() = "trank" = 1 then
    ;###UND HIER KOMMT MEIN SYSTEM VON OBEN######
 


Dies ist auch ein sehr langsames System und es wird bestimmt gleich beschwerden regnen Wink
aber sieh es als denkanstoß...

mfg ComNIk

[EDIT:] Das mit den Slots haben die Herren Tennisball und Kruemelator ja nochmal gut zusammengefasst[EDIT]
WIP: Vorx.Engine
 

EwokonCrack

BeitragMi, Apr 22, 2009 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ich schau gleich mal wie ich das schaffe und bedanke mich für die vielen antworten



das forum hier ist echt ne tolle sache =)
 

EwokonCrack

BeitragMi, Apr 22, 2009 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
funktioniert super - im moment ist nur noch das problem dass er das item nicht nur einmal platziert da dass alles in einer schleife steht Embarassed

Tennisball

BeitragMi, Apr 22, 2009 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
"Exit" vergessen?

Edit:
Ach so, und wenn du das Item kriegst, solltest du das natürlich irgendwie anzeigen (Variable) , dass du es schon hast.
 

BBPro2

BeitragMi, Apr 22, 2009 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
hey,
hab keine antwort, viel mehr ne frage:

wo hast du die grafiken für dein spiel her ?
pixelst du selber, haste nen grafiker oder haste freeware grafiken ? im dritten fall wüsste ich gerne welche und von wo, da ich auch welche suche Wink
danke
 

EwokonCrack

BeitragDo, Apr 23, 2009 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
1. im grunde war es unsinn zu posten dass das item mehrmals gemalt wird, ich bin schließlich nicht doof und kann das problem schon selbst lösen ^.^

-> es war auch nicht als frage gemeint

2. ich designe mit nem selbst-geschriebenen map editor und die tiles dazu hat ne klassenkameradin gemacht Very Happy

also manche details kommen dann später von mir dazu oder n freund der auch am code ab und zu mithilft macht das
 

konstantin

BeitragFr, Apr 24, 2009 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach eine Liste für die aufgesammelten Items.

BlitzBasic: [AUSKLAPPEN]
Type tPickedUpItem
Field name$
Field description$ ; und was du sonst alles brauchst, keine ahnung...
Field image
End Type


Beim aufsammeln erstellst du ein neues PicketUpItem...

BlitzBasic: [AUSKLAPPEN]
schwert.tPickedUpItem = New tPickedUpItem
schwert\name$ = "Sword of Destiny"
; ...


Danach nurnoch das Inventar zeichnen...

BlitzBasic: [AUSKLAPPEN]
For item.tPickedUpItem = Each tPickedUpItem
DrawImage item\image, 20, 100 + y * 32 ; oder so, denk dir was aus...
y = y + 32
Next


Viel Spaß.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group