• 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

0 głosów
64 wizyt
pytanie zadane 12 października w C i C++ przez Jakub 0 Stary wyjadacz (10,420 p.)
zamknięte 13 października 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 przez Hipcio Maniak (74,620 p.)

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

komentarz 12 października przez Jakub 0 Stary wyjadacz (10,420 p.)
o dziwo tak...
1
komentarz 12 października przez Hipcio Maniak (74,620 p.)

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 przez Jakub 0 Stary wyjadacz (10,420 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 przez Hipcio Maniak (74,620 p.)

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 45 wizyt
0 głosów
3 odpowiedzi 216 wizyt
pytanie zadane 27 kwietnia 2017 w C i C++ przez Antero00 Gaduła (3,100 p.)
0 głosów
1 odpowiedź 234 wizyt
pytanie zadane 5 maja 2017 w C i C++ przez Jakub 0 Stary wyjadacz (10,420 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

56,369 zapytań

101,067 odpowiedzi

208,200 komentarzy

28,039 pasjonatów

Przeglądających: 326
Pasjonatów: 10 Gości: 316

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...