[Allegro]Problem z funkcjami
Ostatnio zmodyfikowano 2009-07-25 18:18
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): 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 ^^ |
|
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. |
|
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. |
|
WinerFresh |
» 2009-07-25 20:28:50 Ja bym użył referencji na wskaźnik, ale jak tam sobie chcecie. |
|
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: void chodzenie(); int main(); { chodzenie(); } void 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. |
|
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. |
|
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. 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. |
|
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_zmiennejMożesz też poczytać co nieco o parametrach funkcji. |
|
« 1 » 2 |