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

[allegro5] Kafelek w mapie izometrycznej, a jego zaznaczanie

Ostatnio zmodyfikowano 2012-10-18 15:34
Autor Wiadomość
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)
C/C++
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/
P-67015
DejaVu
» 2012-10-18 14:18:01
Frazy, które należy wpisać w wyszukiwarkę google:
http://cpp0x.pl/forum/temat/?id=3739
P-67019
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...
P-67020
DejaVu
» 2012-10-18 15:34:49
No bo to nie jest łatwe :) Najlepiej sobie zrobić tablicę o wielkości kafelka, np.
C/C++
COffset fixMouse[ 32 ][ 16 ];
Każdy COffset określa o ile należy poprawić indeksy x oraz y. Czyli np.
C/C++
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.
P-67022
« 1 »
  Strona 1 z 1