Stacking im Inventar
Übersicht

EwokonCrackBetreff: Stacking im Inventar |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() 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 ![]() ![]() Liebe Grüße, Suggah |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
ComNik |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() lg |
||
WIP: Vorx.Engine |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
ComNik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich darf auf mein Beispiel weiter oben verweisen? ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
funktioniert super - im moment ist nur noch das problem dass er das item nicht nur einmal platziert da dass alles in einer schleife steht ![]() |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
"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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() danke |
||
EwokonCrack |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() also manche details kommen dann später von mir dazu oder n freund der auch am code ab und zu mithilft macht das |
||
konstantin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mach eine Liste für die aufgesammelten Items.
BlitzBasic: [AUSKLAPPEN] Type tPickedUpItem Beim aufsammeln erstellst du ein neues PicketUpItem... BlitzBasic: [AUSKLAPPEN] schwert.tPickedUpItem = New tPickedUpItem Danach nurnoch das Inventar zeichnen... BlitzBasic: [AUSKLAPPEN] For item.tPickedUpItem = Each tPickedUpItem Viel Spaß. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group