• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ruch sprite/shape po predefiniowanej ścieżce?

Object Storage Arubacloud
0 głosów
191 wizyt
pytanie zadane 26 stycznia 2016 w C i C++ przez dameg Nowicjusz (170 p.)
Witam, mam następujące pytanie, tworze symulację (C++ i SFML) pracy robota mobilnego na magazynie, chciałbym oby po odpaleniu okna programu dany shape/sprite zaczął poruszać się po wcześniej zadanym torze pomiędzy regałami, nie wiem za bardzo jak się do tego zabrać, póki co mam stworzony magazyn oraz klasę robota ale nie wiem jak poruszyć nim w taki sposób jak opisałem wyżej. Jakieś przykładowe linie kodu lub ktoś byłby w stanie wyjaśnić? Pozdrawiam.

3 odpowiedzi

0 głosów
0 głosów
odpowiedź 27 stycznia 2016 przez niezalogowany

Nie wiem na jakim konkretnie efekcie ci zależy, ale załóżmy że ścieżka może być wyznaczona przy pomocy punktów przez które ma przejść punkt, które możesz wrzucić do listy, która będzie się zapętlała, np:

Niech L będzie listą obiektów, A,B,C kolejnymi punktami przez które musi przejść obiekt, 'X -> Y' - relacja mówiąca  tym, że "X wskazuje na Y", tzn

class MyList
{
  Vector2 pos;
  MyList* next;
};


// X -> Y <=>
x.next = y;

Wtedy, wystarczy, że będziesz sprawdzał czy sprite bliżył się do punktu z listy (samo podążanie do punktu możesz zrobić w ten sposób http://szymonsiarkiewicz.pl/poradniki/goto/podazanie-za-obiektem-w-przestrzeni-2d/ ), jeżeli tak to zmieniasz cel za którym ma podążać obiekt na następny.

Psuedokod

class MyList;

// ... <- def MyList


// gdzieś w jakiejś funkcji
MyList* path = new MyList();
path.push( Vector2(0,0) ); // A
path.push( Vector2(0,1) ); // B
path.push( Vector2(1,0) ); // C
path.push( Vector2(1,1) ); // D


/* ścieżka po jakiej będzie poruszał się obiekt


A <-- D
|     ^
|     |
v     |
B --> C

*/

 

0 głosów
odpowiedź 27 stycznia 2016 przez Dash Nałogowiec (29,650 p.)

Swego czasu robiłem mały silnik 2d z możliowością odgrywania scenek. Każda postać miała kolejkę współrzędnych (możesz użyć sf::Vector2f) oraz funkcję która przesuwała postać o kolejną wartość z kolejki. Coś takiego: 

std::queue<sf::Vector2f> path; 

void load(std::queue<sf::Vector2f> & target) 
{
target.push(sf::Vector2f(3,4)); 
target.push(sf::Vector2f(7,6)); 
target.push(sf::Vector2f(3,5)); 
}

// Pętla stałokrokowa 
{


void step()
{
sprite.move(path.front());
path.pop();  
} 



} 

Niestety jest to bardzo niewydajny sposób. Druga wersja działała na zasadzie kireunek i iteracje. Implementacja była by dość długa dlatego tylko opiszę: 

struct mover
{
sf::Vector2f direction; 
int iteration; 
}; 

 Direction to znornalizowany wektor (zakres 0-1) który pokazuje kierunek. Przetrzymujesz wszystko w liście, wpychasz pierwszy element listy do postaci, następnie przesuwasz tyle razy ile wynosi iteration o wektor direction * prędkość postaci. Jeżeli wykonają się wszystkie iteracje, ładujesz kolejny element. 

Podobne pytania

0 głosów
0 odpowiedzi 146 wizyt
pytanie zadane 26 listopada 2016 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 260 wizyt
pytanie zadane 26 października 2016 w C i C++ przez neos Początkujący (320 p.)
0 głosów
0 odpowiedzi 268 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...