Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Poruszanie się sprite'ów w danym obszarze.

Ostatnio zmodyfikowano 2012-10-10 19:51
Autor Wiadomość
MagicznyKacper
Temat założony przez niniejszego użytkownika
[SFML] Poruszanie się sprite'ów w danym obszarze.
» 2012-10-10 17:58:47
Cześć. Natrafiłem na kolejny problem z którym nie mogę sobie poradzić, mianowicie. Grę praktycznie już skończyłem, ale pozostał mi do naprawienia jeden bug który pozwalał Sprite'om wylatywać poza okienko w eter. Napisałem do tego taki kod:
C/C++
if( left ) if( Box.GetPosition().x >= 0 ) { Box.Move( - 3, 0 ); }
if( right ) if( Box.GetPosition().x <= 775 ) Box.Move( 3, 0 );

if( up ) if( Box.GetPosition().y >= 0 ) Box.Move( 0, - 3 );

if( down ) if( Box.GetPosition().y <= 575 ) Box.Move( 0, 3 );

if( left_key ) if( Box1.GetPosition().x >= 0 ) { Box1.Move( - 3, 0 ); }
if( right_key ) if( Box1.GetPosition().x <= 775 ) Box1.Move( 3, 0 );

if( up_key ) if( Box1.GetPosition().y >= 0 ) Box1.Move( 0, - 3 );

if( down_key ) if( Box1.GetPosition().y <= 575 ) Box1.Move( 0, 3 );

Sterowanie Box1 odbywa się za pomocą klawiatury stąd końców _key.

Jak w drugim przypadku (sterowanie klawiaturą) kod działa wręcz idealnie to w pierwszym mogę nadal przekroczyć lewą granicę okna. Co prawda czasami działa normalnie, czasami blokuje się w połowie a jeszcze innym razem przechodzi jak daleko chcę z tym, że trochę wolniej niż normalnie powinien się poruszać obrazek. Myślę, że napisałem dosyć zrozumiale, jeśli nadal nie wiadomo o co chodzi to po prostu napiszcie w komentarzach a postaram się wyjaśnić lub nagrać film. Z góry dziękuję za pomoc.
P-66564
Savail
» 2012-10-10 18:38:04
a spróbuj dopisać se jeszcze takie zabezpieczenie że np:
if( Box.GetPosition().x < 0 ) { Box.getPosition().x = 0 }

Mnie takie rzeczy się zdarzały czasami gdy porównywałem zmienne różnych typów bez przeprowadzenia jawnej konwersji a tej domyślnej niekoniecznie można ufać. Więc jeśli GetPosition().x zwraca ci liczbę typu float to zamień ją na int lub 0 zamień na typ float (0.0f).
P-66570
MagicznyKacper
Temat założony przez niniejszego użytkownika
» 2012-10-10 18:50:36
Box.GetPosition().x zwraca int, przynajmniej tak wynika z konsoli.

cout << Box.GetPosition().x << endl;
Także zamiana na float nic nie daje (testowałem).
Nie specjalnie rozumiem na czym ma polegać to zabezpieczenie, bo wklepując Twój kod prosto do kompilatora wyrzuci błąd, a dodając kolejny znak równości tylko spowolni ruch w lewo za każdym razem, nawet jak jestem na środku `mapy`.
P-66571
Savail
» 2012-10-10 18:57:49
Nie znam się na SFML'u więc nie wiem co zwraca ci te wywołanie:
Box.GetPosition().x

Założyłem, że te wywołanie zwraca ci referencję do zmiennej x, a jeśli wywala ci błąd to napisz jaki. I tak btw, to od czego zależy sterowanie pierwszego Boxa? Bo jeśli to jest bot to możliwe że coś w tym szwankuje i jeśli te zmienne left right... to są boole to powinieneś je ustawiać na false w chwili zetknięcia z granicą
P-66572
MagicznyKacper
Temat założony przez niniejszego użytkownika
» 2012-10-10 19:07:29
Błąd:
.\main.cpp(76) : error C2039: 'getPosition' : is not a member of 'sf::Sprite'
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\SFML/Graphics/Sprite.hpp(44) : see declaration of 'sf::Sprite'
1>.\main.cpp(76) : error C2228: left of '.x' must have class/struct/union

Zwraca mi aktualną pozycję na osi x. Dodam, że nie działa po lewej stronie jak i dla po prawej (czyli po obu może wyjść poza ekran), Box1 i Box steruje człowiek. W bool'u jest to czy gracz nacisnął dany guzik czy nie.
P-66573
Savail
» 2012-10-10 19:10:00
a czytałeś w ogóle te błędy?:p literówka się zdarzyła, powinieneś sam to zobaczyć
P-66574
MagicznyKacper
Temat założony przez niniejszego użytkownika
» 2012-10-10 19:11:49
Faktycznie, poprawiłem i o to co wyskoczyło.
1>.\main.cpp(76) : error C3892: 'sf::Drawable::GetPosition' : you cannot assign to a variable that is const
P-66575
Savail
» 2012-10-10 19:14:18
Angielski to podstawa w rozpoznawaniu błędów i poprawianiu ich :P. Z tego wynika że ta funkcja zwraca ci wartość zmiennej x jako stałą a więc nie możesz jej modyfikować...
P-66576
« 1 » 2
  Strona 1 z 2 Następna strona