malan |
» 2010-02-03 20:40:25 Nie. Chodziło mi o to, że delete używamy tuż przed zakończeniem programu (lub w destruktorze(?)). |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-02-03 21:00:39 no domyslilem sie, ze delete to juz na koniec programu (lub jesli obiekt przestaje istniec i wtedy juz sie go nie wywoluje) dzieki za podp |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-02-03 22:46:01 jestem juz po malej przebudowie kodu - w wiekszosci definicji funkcji zamiast "."musialem wstawic "->", kod troszke sie tez skrocil, bo zamiast wypisywac powtarzajace sie regulki, uzywam petli, pojawil sie jeden problem C_poziom1(); C_poziom1( int x, int y, int s, int w );
to moje konstruktory C_poziom1 ludek( 5, 200, 15, 30 ); ludek.obrazek = load_bmp( "ludek.bmp", default_palette );
tak tworzylem dotad obiekty, a teraz wylada to tak short tab_x[ 7 ] = { 0, 100, 0, 240, 100, 0, 720 }; short tab_y[ 7 ] = { 100, 250, 400, 550, 550, 50 }; short wysokosc_obrazka = 5; short szerokosc_obrazka[ 7 ] = { 600, 700, 500, 500, 30, 30, 70 };
C_poziom1 * podloga = new C_poziom1; for( int i = 0; i < 7; i++ ) { podloga->obrazek = load_bmp( "kreska.bmp", default_palette ); podloga->i_x = tab_x[ i ]; podloga->i_y = tab_y[ i ]; podloga->b_disp = true; podloga->i_s = szerokosc_obrazka[ i ]; podloga->i_w = wysokosc_obrazka; obiekt.push_back( podloga ); }
oczywiscie pojedynczy obiekt, jak ludek, chcialbym dalej tworzyc jak wczesniej a problem jest taki, ze przy C_poziom1 * podloga = new C_poziom1;
mam blad main.cpp|73|undefined reference to `C_poziom1::C_poziom1()' ten problem znika, jak usune konstruktor C_poziom1( int x, int y, int s, int w );
ale wtedy ludek ma blad, ze zle utworzony obiekt. wiem, ze moge inaczej teraz tworzyc ludka, ale to tylko obejscie problemu, a jak go rozwiazac, aby tworzyc w dwojaki sposob obiekty? ps. zmienilem kod na short tab_x[ 7 ] = { 0, 100, 0, 240, 100, 0, 720 }; short tab_y[ 7 ] = { 100, 250, 400, 550, 550, 50 }; short wysokosc_obrazka = 5; short szerokosc_obrazka[ 7 ] = { 600, 700, 500, 500, 30, 30, 70 };
C_poziom1 * podloga = NULL; for( int i = 0; i < 7; i++ ) { podloga = new C_poziom1; podloga->obrazek = load_bmp( "kreska.bmp", default_palette ); podloga->i_x = tab_x[ i ]; podloga->i_y = tab_y[ i ]; podloga->b_disp = true; podloga->i_s = szerokosc_obrazka[ i ]; podloga->i_w = wysokosc_obrazka; obiekt.push_back( podloga ); }
ale tez nic nie pomoglo, ale chyba bardziej poprawnie? ps2. juz naprawilem: for( int i = 0; i < 7; i++ ) { podloga = new C_poziom1( tab_x[ i ], tab_y[ i ], szerokosc_obrazka[ i ], wysokosc_obrazka );
|
|
malan |
» 2010-02-03 23:33:16 Nie zapomniałeś czasem zdefiniować tego konstruktora? C_poziom1::C_poziom1() { }; // edit (23:35) Jeśli chciałbyś użyć tego 2 konstruktora to jakoś tak będzie: for( int i = 0; i < 7; i++ ) { C_poziom1 * podloga = new C_poziom1( tab_x[ i ], tab_y[ i ], szerokosc_obrazka[ i ], wysokosc_obrazka ); podloga->obrazek = load_bmp( "kreska.bmp", default_palette ); podloga->b_disp = true; obiekt.push_back( podloga ); } ..., ale to nie ładnie wygląda ;p. |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-02-04 00:53:49 konstruktory mialem zdefioniowane obydwa :) poki co kod sie kompiluje, ale teraz mam inny problem, nie dzialaja kolizje if( wznoszenie == true ) { for( int i = 1; i <= wartosc_podskoku; i++ ) { ludek.i_y--; for(; iter1 != iter2; iter1++ ) { if( kolizja( ludek, * iter1 ) ) { ludek.i_y =( * iter1 )->i_y +( * iter1 )->i_w; wznoszenie = false; i = wartosc_podskoku; / warunek wyjscia z petli iter1 = iter2; } } } }
a to poprzednia wersja,gdzie zamiast wskaznikow, przetrzymywalem w vector obiekty, wersja dzialajaca dobrze, z kolizjami if( wznoszenie == true ) { for( int i = 1; i <= wartosc_podskoku; i++ ) { ludek.i_y--; for( int j = 0; j < obiekt.size(); j++ ) { if( kolizja( ludek, obiekt[ j ] ) ) { ludek.i_y = obiekt[ j ].i_y + obiekt[ j ].i_w; wznoszenie = false; i = wartosc_podskoku; } } } }
ok nie wazne, chcialem cos przedobrzyc z tymi iteratorami - na pewno tez jest sposob, aby za ich pomoca to wykonac, ale poki co poradzilem sobie jak w poprzednim przykladzie |
|
1 « 2 » |