[allegro5] Kafelek w mapie izometrycznej, a jego zaznaczanie
Ostatnio zmodyfikowano 2012-10-18 15:34
Temes Temat założony przez niniejszego użytkownika |
[allegro5] Kafelek w mapie izometrycznej, a jego zaznaczanie » 2012-10-18 10:11:05 Męczyłem się kilkadziesiąt dni nad obliczeniami, główkowałem, przeglądałem strony, szukałem odpowiedzi jak stworzyć izometrię. Wymyśliłem takie coś: (część kodu) int time, x, y; do { time = 0; for( int y = 1; y <= 16; y++ ) { for( float x = 1; x <= 32 - time; x++ ) { if( StatusMyszki.x >= 368 + x && StatusMyszki.x <= 400 && StatusMyszki.y >= 285 && StatusMyszki.y <= 300 ) { al_draw_bitmap( On, 368, 284, 0 ); } else al_draw_bitmap( Off, 368, 284, 0 ); } time++; } al_flip_display(); } while( 1 )
On - zielony kafelek (włączony po najechaniu) Off - czerwony kafelek (myszka nie najechała na niego) Działa niestety tylko po części i nie wiem co zrobić aby działało w pełni. To z kafelka 32x16, po najechaniu myszką zaznacza fragment może 20x16. Nie mam pojęcia jak to naprawić. Muszę obliczyć pozycję x i y, i wyznaczyć "if'a" jeżeli myszka bedzie na tej pozycji x i y. Ilustracja: (chodzi mi o to czerwone pole, jeżeli myszka najedzie na to pole to wtedy zmienia kolor na zielony) http://imageshack.us/f/507/31028398.png/ |
|
DejaVu |
» 2012-10-18 14:18:01 |
|
Temes Temat założony przez niniejszego użytkownika |
» 2012-10-18 14:45:46 Niestety nie jest to czego szukam, mapę rysować umiem, ale niestety nie mam bladego pojęcia jak wyznaczyć współrzędne tej "widocznej" części kafelka izometrycznego.
Szukałem wiele razy poradników i innych rzeczy, ale nic nie znalazłem. Ciągle próbuję z tym if'em i for'em ale ciągle nic mi nie wychodzi... Nie mogę znaleźć rozwiązania... |
|
DejaVu |
» 2012-10-18 15:34:49 No bo to nie jest łatwe :) Najlepiej sobie zrobić tablicę o wielkości kafelka, np. COffset fixMouse[ 32 ][ 16 ];
Każdy COffset określa o ile należy poprawić indeksy x oraz y. Czyli np. CPosition getMouseSelection( int x, int y ) { CPosition result( x / 32, y / 16 ); result += fixMouse[ x % 32 ][ y % 16 ]; return result; } Oczywiście kod należy zaadoptować do własnych struktur danych. |
|
« 1 » |