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

question-closed SFML - gra snake, problem z ustawieniem odległości między segmentami węża

Object Storage Arubacloud
0 głosów
175 wizyt
pytanie zadane 12 października 2018 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 13 października 2018 przez Jakub 0

Witam, może na początek podam wycinek gry żeby było widać co jest nie tak :

jak widać elementy węża nie układają się równomiernie...

Oto fragmenty kodu odpowiedzialne za ich ułożenie:

const float mult = 1.2f;

// (...)

Snake::Snake(int n, sf::Color bodyColor, sf::Vector2f size, sf::Vector2u windowSize) 
	: m_snake(n) {

	int actX = windowSize.x / 2.f; //pierwsze element (głowa węża) jest na środku ekranu, typ int jest tu celowy by zaokrąglić  
	int actY = windowSize.y / 2.f;
	m_gameWindowDims = windowSize;

	m_actualDirections = SnakeDirections::LEFT; //tam sprawy z poruszaniem się...
  	m_lastDirectionsMove = SnakeDirections::NOTHING;

	for (int i = 0; i < n; ++i) {
		m_snake[i].setFillColor(bodyColor);
		m_snake[i].setSize(size);
		m_snake[i].setOrigin(size.x / 2.f, size.y / 2.f);
		m_snake[i].setPosition((i*size.x*mult+actX), actY); //sedno sprawy
	}
}

najważniejsza część:

m_snake[i].setPosition((i*size.x*mult+actX), actY);

+actX - zaczynamy od środka dlatego tą zmienną dodajemy do wyniku

i*mult*size.x - kolejne segmenty to numer segmentu * wielkość każdego segmentu * mnożnik  ( odpowiedzialny za wyznaczenie odległości między elementami )

 

Już się długi czas nad tym zastanawiam i nie mam pojęcia co zawaliłem :/

Z góry jestem bardzo wdzięczny za pomoc.

komentarz zamknięcia: rozwiązane
1
komentarz 12 października 2018 przez niezalogowany

Czy gdy mnożnik mult przyjmuje wartości całkowite problem znika?

komentarz 12 października 2018 przez Jakub 0 Pasjonat (23,120 p.)
o dziwo tak...
1
komentarz 12 października 2018 przez niezalogowany

Czyli mamy problem ;) Może zamiast mult uwzględnij taki czynnik jak odległość segmentów węża od siebie np tak:

m_snake[i].setPosition((i*(size.x + dist)+actX), actY);
komentarz 12 października 2018 przez Jakub 0 Pasjonat (23,120 p.)
Teraz wszystko działa, wielkie dzięki :) To rozwiązanie ogólnie wygląda dużo lepiej, ale jestem bardzo ciekawy co dokładnie powodowało wcześniej błąd. Powiedziałbyś?
1
komentarz 12 października 2018 przez niezalogowany

Gdy wyrażenie i*size.x*mult+actX będzie miała jakąś część po przecinku, a mając skończoną całkowitą liczbę pikseli będzie problem w narysowaniu tego tak by wszędzie było równo ;)

Podobne pytania

0 głosów
0 odpowiedzi 138 wizyt
0 głosów
3 odpowiedzi 650 wizyt
pytanie zadane 27 kwietnia 2017 w C i C++ przez Antero00 Gaduła (3,670 p.)
0 głosów
1 odpowiedź 593 wizyt
pytanie zadane 5 maja 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

92,550 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 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!

...