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

[Allegro]Problem z funkcjami

Ostatnio zmodyfikowano 2009-07-25 18:18
Autor Wiadomość
Diego
Temat założony przez niniejszego użytkownika
[Allegro]Problem z funkcjami
» 2009-07-25 17:44:16
Witam
Mam dosc nietypowy problem z funkcjami piszac gre w allegro.
A mianowicie nie wykonuja one operacji zamieszczonych w ich ciele (przynajmniej tak to wyglada):

C/C++
void bitmap_menu();

int main()
{
    bitmap_menu();
    tlo_menu = load_bmp( "D:\\Gierka\\Data\\Menu\\00.bmp", default_palette );
}

void bitmap_menu()
{
    BITMAP * tlo_menu = NULL;
}
END_OF_FUNCTION( bitmap_menu );
Gdy kompilator dochodzi do momentu ladowania bitmapy do pamieci przy urzyciu tego wlasnie wskaznika wyskakuje error 'tlo_menu' undeclared.
Jest to taki jeden przyklad funkci niedzialajacej w moim kodzie. Inne funkcje odpowiadajace powiedzmy za obliczanie wspolzednych postaci tez nie dzialaly tyle ze nie wyskakiwal zaden blad - poprostu postac sie nie ruszala. Jesli chodzi o funkcje podane w kursie allegro np:
void increment_speed();
void init();
void deinit();
wszystkie dzialaja i tu nasowa sie pytanie co jest grane ^^
P-8770
DejaVu
» 2009-07-25 18:08:23
Zmienna w funkcji jest lokalna - nie widać ją w innych częściach programu. Jest to narutalne i porządanie zachowanie kompilatora. Jeśli chcesz, aby zmienna była widoczna musi być ona globalna lub przekazana umiejętnie do funkcji poprzez parametr.
P-8771
DeBugger
» 2009-07-25 19:38:14
Ja bym użył wskaźnika jako argumentu (w tym przypadku wskaźnika na wskaźnik), chodź jeżeli chodzi o allegro, to trochę nieoptymalne.
P-8772
WinerFresh
» 2009-07-25 20:28:50
Ja bym użył referencji na wskaźnik, ale jak tam sobie chcecie.
P-8774
Diego
Temat założony przez niniejszego użytkownika
» 2009-07-26 16:35:20
W przypadku innych funkcji tez byl problem z czyms takim. Nie da sie poprostu zrobic tego tak ze czesc kodu wstawiam do funkcji i w miejscu w ktorym jest ona potrzebna poprostu ja wywołuje?  Np mam czesc kodu ktora sprawdza wcisniete klawisze i oblicza polozenie postaci na ekranie, wstawiam to do funkcji i wywołuje w nastepujacy sposob:

C/C++
void chodzenie();
int main();
{
    chodzenie();
}
void chodzenie()
{
    ...//kod odpowiedzialny za chodzenie :)
}


Jak bawilem sie w konsoli to tak wlasnie robilem bez argumentow i wszystko dzialalo, teraz w allegro troche tego kodu juz jest i latwo sie w tym pogubic chcialem to podzielic wszystko na funkcje i pliki.
P-8794
DejaVu
» 2009-07-26 16:37:54
Już Ci pisaliśmy.
Opcja 1) zmienne globalne.
Opcja 2) argumenty funkcji.

Proponuję poczytać kurs na temat funkcji.
P-8795
GoldWolf
» 2009-07-26 17:52:48
Proponuję poczytać kurs na temat funkcji.Też proponuje, jest tam kilka ciekawych rozwiązań, które naprowadzą cię na swoje rozwiązanie.
Widać, że trochę tematu nie rozumiesz.
C/C++
void bitmap_menu();

int main()
{
    bitmap_menu();
   
}

void bitmap_menu()
{
    BITMAP * tlo_menu = NULL;
    tlo_menu = load_bmp( "D:\\Gierka\\Data\\Menu\\00.bmp", default_palette );
   
}
END_OF_FUNCTION( bitmap_menu );
Lub przekazać funkcji zmienną tlo_menu. Zmienne funkcji są dla niej prywatne i nie widoczne dla innych funkcji, chyba że je przekażesz. Radzę poczytać o funkcjach.

//JCJ mówi: lepiej i poprawniej mówić "lokalne", ponieważ "prywatne" odnosi się do obiektowości.
P-8798
lynx
Drogi Diego,
» 2009-07-27 23:49:23
kompilator nie 'przyjmuje' twojego kodu, ponieważ dla funkcji int main() zmienna tlo_main nie istnieje. Pomimo iż wywołałeś funkcję w int main() która deklaruje tą zmienną, zaraz po znaku '}' zmienna kończy swój żywot. Musisz więc zedklarować zmienną globalnie ( zaraz po #include i przed int main()) , bądź inaczej przerobić swój kod. Bo to co zadeklarujesz funkcji, może działać tylko tam.

Poczytaj: http://pl.wikibooks.org/wiki/C/Zmienne#Zasi.C4.99g_zmiennej

Możesz też poczytać co nieco o parametrach funkcji.
P-8842
« 1 » 2
  Strona 1 z 2 Następna strona