SeaMonster131 Temat założony przez niniejszego użytkownika |
[C++, Allegro5] Scrollowanie mapy » 2011-05-25 20:16:25 Wiem wiem, milion tematów o tym było :) Nie jest to mój 1. projekt z przewijaną mapką, ale jednak nie wiem jak ten błąd rozwiązać. Otóż chciałbym po prostu spr na jakim polu w mapie kafelkowej (int mapa[][]) znajduje sie kursor myszy. Tzn umiem to zrobić, ale coś mi nie działa.. Pole bez żadnego scrollowania ma np nr 13 (mapa[0][13]), kiedy przewinę mapę tak, że to pole jest zaraz na początku ekranu to ten sam kafelek ma nr 36 (mapa[0][36]) a według mnie powinien mieć nr 13 tak jak wcześniej. int sz_kaf = 50, dl_kaf = 50; int mapx = 0, mapy = 0; int sz_okna = 900, dl_okna = 700;
if( map[ y ][ x ] == 0 ) al_draw_bitmap( polska, x * sz_kaf -( mapx / sz_kaf ), y * dl_kaf -( mapy / dl_kaf ), 0 );
if( mysz.x >= sz_okna - 20 || al_key_down( & klaw, ALLEGRO_KEY_RIGHT ) ) mapx += 50;
int myszkax =( mysz.x / sz_kaf ) +( mapx / sz_okna ); int myszkay =( mysz.y / dl_kaf ) +( mapy / dl_okna ); Jak dla mnie to powinno to być ok, ale nie działa, nie wiem gdzie tu jest błąd. Z góry dzięki! |
|
DejaVu |
» 2011-05-25 20:41:58 PolozenieMyszyNaMapieOsX = PrzesuniecieMapyX + MyszX; KafelekX = PolozenieMyszyNaMapieOsX / SzerokoscKafelka;
|
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-05-25 20:51:44 Zrobiłem tak jak Pan @DejaVu napisał, wcześniej i dla spr teraz, to ten kafelek (map[0][13]) przy początku ekranu ma wartość 630 (czyli wyszłoby że jest to map[0][630]) bodajże... więc to tez nie działa... ^^ w sensie, że zrobiłem tak: ( mapx + mysz.x ) / sz_kaf |
|
DejaVu |
» 2011-05-25 21:21:07 Zazwyczaj ScrollX ma wartość = 0 jeżeli wyświetlasz początek mapy. Jeżeli u Ciebie jest inaczej to odejmij te 630 czy ile tam masz przesunięcie początkowe. To jest czysta matematyka - dodawanie i odejmowanie... |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-05-25 22:27:09 |
|
DejaVu |
» 2011-05-25 22:31:45 1. Jaką wartość ma ScrollX gdy mapa jest w stanie początkowym (poprawnym wg. Twoich screenów).
2. O ile wartość ScrollX zostanie zwiększona gdy przesuniesz mapę o szerokość ekranu?
A tak swoją drogą to rozwiązanie masz już podane Twojego problemu...
/edit:
Poza tym niemożliwe jest osiągnięcie stanu x = 630 gdy mapa nie jest przewinięta, skoro:
mapx = 0; myszX = 800; kafelekX = 5; WynikX =( mapax + myszX ) / kafelekX;
/edit2:
Z danych które masz podane wynika, że:
Wniosek: coś kręcisz :) |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-05-25 22:38:55 1. Zero, ScrollX = 0; 2. Wychodzi na to, że: 1 piksel = 2500 ScrollX A tak swoją drogą to rozwiązanie masz już podane Twojego problemu...Mówi Pan o tym: PolozenieMyszyNaMapieOsX = PrzesuniecieMapyX + MyszX; KafelekX = PolozenieMyszyNaMapieOsX / SzerokoscKafelka; ? Ja zawsze tak robiłem, lecz to nie działa :/ |
|
DejaVu |
» 2011-05-25 22:40:16 Tak, mówię o tym. |
|
« 1 » 2 |