Inventory - Czyli zawartość plecaka w grze RPG
Ostatnio zmodyfikowano 2024-08-15 17:08
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-04 22:44:45 No właśnie testowałem na różne sposoby i ten kod mi działał. Nie znałem tego wzoru. Postaram się zapamiętać. Dzięki za pomoc mistrzu :-) |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-05 16:47:08 Jeszcze buga znalazłem. Jak z prawego inventory przechodzę na lewy inventory to zaznacza puste pola. Pomożesz mi jeszcze z tym ? if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) || sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { if( activePanel == activeInventoryPanel::Right ) { if( cursor % itemsInRow == 0 ) { activePanel = activeInventoryPanel::Left; cursor = cursor + itemsInRow - 1; } else cursor -= 1; } else { if(( cursor % itemsInRow != 0 ) ) cursor -= 1; } }
|
|
pekfos |
» 2024-08-05 18:38:09 cursor i scroll razem dają indeks w wektorze przedmiotów, więc wiesz że wskazujesz na nieistniejący przedmiot i możesz kursor poprawić. A jak, to zależy jaki efekt chcesz uzyskać. Tylko czy nie byłoby lepiej utrzymywać 2 kursory i przełączać panele osobnym klawiszem? Pomyśl co by było jakby na lewym panelu był tylko 1 przedmiot. Logika dla przejścia na prawy panel w ogóle zadziała jak nie możesz dojechać do krawędzi? Nie wspominając ile trzeba klawiszy nacisnąć by przejść w jakieś miejsce na prawym panelu po każdym przejściu na lewy. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-05 18:43:13 cursor i scroll razem dają indeks w wektorze przedmiotów, więc wiesz że wskazujesz na nieistniejący przedmiot i możesz kursor poprawić. No właśnie tylko jak poprawić cursor i scroll. Próbuję to sobie jakoś rozrysować i za każdym razem mi nie wychodzi :-/ Tylko czy nie byłoby lepiej utrzymywać 2 kursory i przełączać panele osobnym klawiszem? Pomyśl co by było jakby na lewym panelu był tylko 1 przedmiot. Z przechodzeniem z inventoryLeft na inventoryRight nie mam problemu. if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) || sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { if( activePanel == activeInventoryPanel::Left ) { if( cursor + inventoryLeft->scroll * itemsInRow >= inventoryLeft->inventory->items.size() - 1 ) { activePanel = activeInventoryPanel::Right; cursor = cursor / itemsInRow * itemsInRow; } else if( cursor % itemsInRow == itemsInRow - 1 ) { activePanel = activeInventoryPanel::Right; cursor = cursor - itemsInRow + 1; } else { cursor += 1; } } else { if( cursor % itemsInRow != itemsInRow - 1 ) { if( cursor + 1 + inventoryRight->scroll * itemsInRow < inventoryRight->inventory->items.size() ) cursor += 1; } } }
|
|
pekfos |
» 2024-08-05 18:54:15 No właśnie tylko jak poprawić cursor i scroll. Próbuję to sobie jakoś rozrysować i za każdym razem mi nie wychodzi :-/ scrolla nie ruszaj bo masz przedmioty na widoku, chyba że przekroczyłeś jakimś sposobem maxScroll. Oblicz indeks który ci wyszedł i jak jest większy od indeksu ostatniego przedmiotu w panelu, to odejmij różnicę od cursor. To da zachowanie poprawne, ale niekoniecznie najlepsze/intuicyjne. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-05 19:07:18 Nie wiem czy o to chodziło, ale nie działa. if( cursor + inventoryLeft->scroll * itemsInRow >= inventoryLeft->inventory->items.size() ) { cursor = cursor -( inventoryLeft->inventory->items.size() - inventoryLeft->scroll * itemsInRow ); }
|
|
pekfos |
» 2024-08-05 19:16:46 Nie o to chodziło. Miałeś porównać dwie rzeczy i obliczyć ich różnicę, a nie odejmujesz tych samych rzeczy. auto & items = inventoryLeft->inventory->items; if( items.empty() ) cursor = 0; else { int diff = cursor + inventoryLeft->scroll * itemsInRow -( items.size() - 1 ); if( diff > 0 ) cursor -= diff; } |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-05 19:25:52 Aaa takie coś. Dobra działa. if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) || sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { if( activePanel == activeInventoryPanel::Right ) { if( cursor % itemsInRow == 0 ) { activePanel = activeInventoryPanel::Left; if( inventoryLeft->inventory->items.size() == 0 ) cursor = 0; else { cursor = cursor + itemsInRow - 1; int diff = cursor + inventoryLeft->scroll * itemsInRow -( inventoryLeft->inventory->items.size() - 1 ); if( diff > 0 ) cursor -= diff; } } else cursor -= 1; } else { if(( cursor % itemsInRow != 0 ) ) cursor -= 1; } }
|
|
1 « 2 » 3 4 |