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

znowu błąd segmentecji

Ostatnio zmodyfikowano 2010-09-08 14:04
Autor Wiadomość
DejaVu
» 2010-09-07 12:40:53
Ja chciałbym się tylko dowiedzieć czy problem, który został określony w pierwszym poście został rozwiązany czy też nie. Leci bowiem 5ta strona różnych dziwnych wywodów co by sugerowało, że tak właśnie się stało...

/edit:
No w zasadzie to już 6ta strona :)
P-21816
inny1997
Temat założony przez niniejszego użytkownika
» 2010-09-07 13:07:37
nie chcało mi się rozpoczynać nowego tematu. i właściwie to pierwszy problem został rozwiązany (problem wyświetlania bitmap),ale drugi (nie poruszania się obiektu) nie został rozwiązany.
P-21817
malan
» 2010-09-07 20:12:24
ale drugi (nie poruszania się obiektu) nie został rozwiązany
Dostałeś tu multum odpowiedzi- nie rozumiem w czym masz problem? :)
Wrzuć gdzieś cały projekt (z najnowszym kodem, obrazkami, muzyką itp.) tak żebyśmy mogli odpalić IDE, dodać liby i skompilować. Może dziś zerknąłbym ;p.
P-21822
inny1997
Temat założony przez niniejszego użytkownika
» 2010-09-07 21:02:42
oto link http://rapidshare.com/files/417688393/test_gra_v.2.rar
już chyba wymyśliłem pomysł na rozwiązanie problemu za pomocą new ,ale jest chyba za skompikowany . jesze zastanowie się nad tym pomysłem.

P-21824
inny1997
Temat założony przez niniejszego użytkownika
» 2010-09-07 21:27:22
zmeinłem kod teraz znowu używam new ,ale w zupełnie innej formie.
niestety jak zawsze program nie chce się skomilować
wyrzyca błąd


main.cpp: In function `int _mangled_main()':
main.cpp:230: error: request for member `ste' in `graw', which is of non-class type `grawitacja ()()'
main.cpp:230: error: request for member `ste' in `graw', which is of non-class type `grawitacja ()()'

main.cpp:233: error: request for member `ste' in `graw', which is of non-class type `grawitacja ()()'
main.cpp:234: error: request for member `ste' in `graw', which is of non-class type `grawitacja ()()'
main.cpp:236: error: request for member `grawituj' in `graw', which is of non-class type `grawitacja ()()'

oto kod
C/C++
#include <allegro.h>
#include <iostream>
#include <math.h>

class kolizjie
{
private:
    BITMAP * kula;
    BITMAP * mapa;
public:
    int x;
    int y;
    int x_2;
    int y_2;
    bool czy_kol_gora;
   
    bool czy_kol_lewo;
   
    bool czy_kol_dol;
   
    bool czy_kol_prawo;
   
    void spr_kol();
   
    kolizjie()
    {
        kula = load_bmp( "kula.bmp", default_palette );
        mapa = load_bmp( "mapa.bmp", default_palette );
        x = 100;
        x_2 = 100 + kula->h;
        y = 100;
        y_2 = 100 + kula->w;
        czy_kol_dol = false;
        czy_kol_gora = false;
        czy_kol_lewo = false;
        czy_kol_prawo = false;
       
    }
    ~kolizjie()
    {
        destroy_bitmap( mapa );
        destroy_bitmap( kula );
    }
};
void kolizjie::spr_kol()
{
    if
    ( getpixel( mapa, x_2, y - 1 ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x, y - 1 ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa,( x + x_2 ) / 2, y - 1 ) != makecol( 255, 0, 255 ) )
    { czy_kol_gora = true; }
   
    if
    ( getpixel( mapa, x_2 - 1, y ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x_2 - 1, y_2 ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x_2 - 1,( y_2 + y ) / 2 ) != makecol( 255, 0, 255 ) )
    { czy_kol_prawo = true; }
   
    if
    ( getpixel( mapa, x_2, y_2 + 1 ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x, y_2 + 1 ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa,( x + x_2 ) / 2, y_2 + 1 ) != makecol( 255, 0, 255 ) )
    { czy_kol_dol = true; }
   
    if
    ( getpixel( mapa, x + 1, y_2 ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x + 1, y ) != makecol( 255, 0, 255 ) ||
    getpixel( mapa, x + 1,( y + y_2 ) / 2 ) != makecol( 255, 0, 255 ) )
    { czy_kol_lewo = true; }
   
}

class sterowanie
{
public:
    kolizjie * kol;
    bool prawo;
    bool lewo;
    bool skok;
    void spr_ste();
   
    sterowanie()
    {
        prawo = false;
        lewo = false;
        skok = false;
        kol = new kolizjie;
    }
   
    ~sterowanie()
    {
        delete kol;
    }
};
void sterowanie::spr_ste()
{
    if( key[ KEY_LEFT ] && kol->czy_kol_lewo == 0 )
    { lewo = true;
        kol->x += 1;
        kol->x_2 += 1;
        lewo = false; }
   
    if( key[ KEY_RIGHT ] && kol->czy_kol_prawo == 0 )
    { prawo = true;
        kol->x += 1;
        kol->x_2 += 1;
        prawo = false; }
   
    if( key[ KEY_UP ] && kol->czy_kol_dol == 1 )
    { skok = true; }
   
}

class grawitacja
{
private: public:
    float a;
   
    float t0; float t1;
   
    float roznica; float przed;
   
    bool czy_skok;
    sterowanie * ste;
   
    float v0; float v1;
   
    void grawituj();
   
    grawitacja()
    {
        a = 10;
        t0 = 0;
        t1 = 0.1;
        roznica = 0;
        przed = 0;
        v0 = 0;
        v1 = 40;
        czy_skok = false;
        ste = new sterowanie;
    }
    ~grawitacja()
    {
    }
};

void grawitacja::grawituj()
{
    if( ste->skok && !czy_skok )
    { v0 = v1;
        czy_skok = true; }
   
    if( !ste->skok && !czy_skok && !ste->kol->czy_kol_dol )
    { v0 = 0;
        czy_skok = true; }
   
    if( czy_skok )
    {
        roznica =( v0 * t0 -( a *( t0 * t0 ) ) / 2 ) - przed;
        ste->kol->y = ste->kol->y + static_cast < int >( round( roznica ) );
        ste->kol->y_2 = ste->kol->y_2 + static_cast < int >( round( roznica ) );
       
        przed =( v0 * t0 -( a *( t0 * t0 ) ) / 2 );
        t0 = t0 + t1;
        if( ste->kol->czy_kol_dol && roznica < 0 )
        {
           
            while( roznica < 0 )
            {
               
                roznica++; ste->kol->y--;
                if( !ste->kol->czy_kol_dol )
                {
                    ste->kol->y++;
                    czy_skok = false;
                    t0 = 0;
                    break;
                }
            }
           
        }
    }
};
volatile long pre = 0;
void inc_pre()
{
    pre++;
}
END_OF_FUNCTION( inc_pre );

LOCK_VARIABLE( pre );
LOCK_FUNCTION( inc_pre );
int main()
{
   
   
    allegro_init();
    install_timer();
    install_keyboard();
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
   
    int t2 = 10;
    int x;
   
   
   
   
   
    install_int_ex( inc_pre, BPS_TO_TIMER( 100 ) );
    BITMAP * ziemia;
    BITMAP * trawa;
    BITMAP * kula;
    BITMAP * tlo;
    BITMAP * bufor;
   
    ziemia = load_bmp( "ziemia.bmp", default_palette );
    trawa = load_bmp( "trawa.bmp", default_palette );
    kula = load_bmp( "kula.bmp", default_palette );
    tlo = load_bmp( "tlo.bmp", default_palette );
    bufor = create_bitmap( 800, 600 );
    grawitacja graw();
   
    while( !key[ KEY_A ] )
    {
       
        blit( tlo, bufor, 0, 0, 0, 0, tlo->w, tlo->h );
        blit( ziemia, bufor, 0, 0, 0, 600 -( ziemia->h ), ziemia->w, ziemia->h );
        masked_blit( trawa, bufor, 0, 0, 0, 600 -( ziemia->h + trawa->h ), ziemia->w, trawa->h );
        graw.ste->kol->masked_blit( kula, bufor, 0, 0, graw.ste->kol->x, graw.ste->kol->y, kula->w, kula->h );
        blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h );
       
        graw.ste->spr_ste(); rest( 100 );
        graw.ste->kol->spr_kol();
        if( pre % t2 < 6 )
        { graw.grawituj(); }
    }
   
    destroy_bitmap( bufor );
    destroy_bitmap( tlo );
    destroy_bitmap( ziemia );
    destroy_bitmap( trawa );
    return 0;
   
    allegro_exit();
};
END_OF_MAIN()

komunikacjia wygląda następująco
grawitacja(tworzy obiekt i wskźnik na sterowanie)->
sterowanie(tworzy kolejny obiekt i wskaźnik na kolizje)->
kolizje(ten obiekt jest wykorzystywany przez grawitacje i sterowanie)
P-21825
ison
» 2010-09-07 23:15:56
C/C++
grawitacja graw();
zamień na
C/C++
grawitacja graw;

ta linijka:
C/C++
graw.ste->kol->masked_blit( kula, bufor, 0, 0, graw.ste->kol->x, graw.ste->kol->y, kula->w, kula->h );
po pierwsze: funkcja masked_blit nie jest przecież w klasie kolizje
po drugie: bitmapa o nazwie "kula" jest w klasie kolizje ;)

tak powinna wyglądać ta linijka:
C/C++
masked_blit( kula, bufor, 0, 0, graw.ste->kol->x, graw.ste->kol->y, graw.ste->kol->kula->w, graw.ste->kol->kula->h );

nie zapomnij również o upublicznieniu bitmap w klasie kolizje, jeśli chcesz tego uniknąć to zamiast wywoływać wyżej wymienioną funkcję masked_blit w main() możesz stworzyć metodę klasy kolizje, która będzie odpowiedzialna za rysowanie


p.s. w żadnym wypadku się nie poddawaj, pamiętaj że zadając tego typu pytania czegoś się uczysz; więc łatwo się nie zniechęcaj ;)
P-21830
inny1997
Temat założony przez niniejszego użytkownika
udało się !!!
» 2010-09-08 14:04:25
oto link do daiałającego projektu
http://rapidshare.com/files/417831526/test_gra_v.2.rar

wreszcie udało się!
P-21835
1 2 3 4 5 « 6 »
Poprzednia strona Strona 6 z 6