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

#define

Ostatnio zmodyfikowano 2009-12-11 17:11
Autor Wiadomość
dmx81
Temat założony przez niniejszego użytkownika
#define
» 2009-12-11 15:44:50
Witam

mam kilka linijek czesto do wpisywania i chcialbym nieco ukrocic zapis,a do zapisania mam:

obiekt1.x,obiekt1.y,obiekt1.s,obiekt1.w

obiekt2.x   ........  
itd dla kazdego nastepnego obiektu, sluzy m.in jako argumenty dla funkcji sprawdzajacych np kolizje, rowniez do funkcji wyswietlania obrazu (masked_blit)
i musze dokladnie te same rzeczy wpisywac(kopiowac)
czy mozna to zrobic za pomoca define? bo wczesniej nie uzywalem tej dyrektywy, a moje proby koncza sie bledami
P-12071
DejaVu
» 2009-12-11 16:08:38
Nie używaj define'a tam gdzie nie trzeba. Napisz po prostu własną funkcję. Przykład:
C/C++
void masked_blit( CObiekt & ob )
{
    masked_blit(...); //to wywołanie funkcji allegro
} //

//...
CObiekt obiekt[ 10 ];
for( int i = 0; i < 10; i++ )
     masked_blit( obiekt[ i ] );
P-12073
Elaine
» 2009-12-11 16:20:40
Nie lepiej zrobić z tego metodę zamiast wolnostojącej funkcji?
P-12077
DejaVu
» 2009-12-11 16:42:57
Prościej... ale ja nie wiem czy u niego obiekt to struktura czy obiekt ;)
P-12089
dmx81
Temat założony przez niniejszego użytkownika
» 2009-12-11 16:43:56
C/C++
bool kolizja_boczna( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 )
{
    if( x1 + s1 == x2 && y1 + w1 > y2 && y1 < y2 + w2 || x1 == x2 + s2 && y1 + w1 > y2 && y1 < y2 + w2 )
         return true;
    else return false;
   
}
bool kolizja_gorna( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 )
{ if( x1 + s1 > x2 && y1 == y2 + w2 || x1 < x2 + s2 && y1 == y2 + w2 )
         return true;
    else return false; }

bool kolizja_dolna( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 )
{ if( x1 + s1 > x2 && y1 + w1 == y2 && x1 < x2 + s2 )
         return true;
    else return false; }
w miejsca x1,x2 itd wpisywac musze ludek1.x ludek1.y, sciana.x, sciana.y

a zamiast tego chcialem wpisac kolizja(ludek,sciana) gdzie ludek i sciana to wlasnie te parametry, rowniez wlasnie w masked_blit zauwazyelm ze
uzywam tych samych zapisow -
ludek.obrazek,bufor,0,0,ludek.x,ludek.y,ludek.s,ludek.w

dlatego zalezalo mi na skroceniu tych nazw
, ale widze nie polecacie?

ps. u mnie najpierw byly obiekty, teraz przebudowalem, ze jest class

C/C++
class C_Obiekt
{
public:
    int x, y, s, w;
    BITMAP * obrazek;
    C_Obiekt( int, int, int, int );
};
C_Obiekt::C_Obiekt( int poz_x, int poz_y, int szerokosc, int wysokosc )
{
    x = poz_x; y = poz_y; s = szerokosc; w = wysokosc;
}
P-12090
DejaVu
» 2009-12-11 16:51:33
To napisz funkcję przyjmującą 2 argumenty tj. ludek i ściana i po problemie.
P-12092
dmx81
Temat założony przez niniejszego użytkownika
» 2009-12-11 17:11:36
Czyli jako argumentow dla funkcji kolizja, zamiast argumentow x,y,w,s dla obiektu 1 i 2, moge uzyc
C/C++
kolizja( C_Obiekt obiekt1, C_Obiekt obiekt2 )
{
    if( obiekt1.x > obiekt2.x...)
         }
?

juz probuje :) myslalem, ze kompilator zwroci blad ze nie wie co to x,y, jesli ich nie uzyje jako argumentow, ale zaraz sie przekonam :) dzieki za podpowiedz - jak widac, jeszcze brak mi obycia ;)
P-12099
« 1 »
  Strona 1 z 1