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

Kolizje w allegro C++

Ostatnio zmodyfikowano 2012-04-09 12:55
Autor Wiadomość
cichy
Temat założony przez niniejszego użytkownika
» 2012-04-05 19:58:12
dzięki pomogło to z nawiasem w funkcji ale wyskakuje mi dziwny błąd:
C/C++
install_timer();
install_keyboard();
install_mouse();
a błędy:
expected constructor, destructor, or type conversion before ';' token
i tak do każdego z tych.
P-53909
xevuel
» 2012-04-05 20:09:54
Po
C/C++
bool kolizja( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 )
{
    if( x2 <= x1 + s1 && x2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else
    if( x2 <= x1 + s1 && x2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true; else
    if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else
    if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true;
    else return false; };
 usuń średnik.

Co do tych funkcji: Chcesz je wywołać poza żadną inną funkcją? Wstaw je do main(), czy gdzie tam one są ci potrzebne.
P-53910
cichy
Temat założony przez niniejszego użytkownika
» 2012-04-05 20:56:20
Tą właśnie usunąłem a funckcję tą drógą wywołuje właśnie w main tylko problem jest z tymi instalacjami.
P-53912
xevuel
» 2012-04-05 20:59:41
te 'instalacje' są wywoływane poza żadną funkcją, i to o nich mówię.

No chyba że zmieniłeś kod, pokaż aktualny...
P-53914
cichy
Temat założony przez niniejszego użytkownika
» 2012-04-05 22:45:17
program działa ale funkcja już nie. nie ma błędu ale nie ma reakcji na klawisze
C/C++
#include <allegro.h>
#include <ctime>
#include <iostream>

bool kolizja( int kolo_x, int kolo_y, int kolo_s, int kolo_h, int kwadrat_x, int kwadrat_y, int kwadrat_s, int kwadrat_h )
{
    if(( kwadrat_y + kwadrat_h - 1 ) < kolo_y or kolo_x >( kwadrat_x + kwadrat_s ) or( kolo_y + kolo_h - 1 ) < kwadrat_y or kolo_x >( kwadrat_x + kwadrat_s + 1 ) )
    {
        if( kolo_x > 0 )
        {
            if( key[ KEY_A ] ) kolo_x--;
           
            return false;
        }
    }
   
    if(( kolo_x + 24 ) < 640 )
    {
        if(( kwadrat_y + kwadrat_h - 1 ) < kolo_y or kolo_x + kolo_s < kwadrat_x or kolo_y + kolo_h - 1 < kwadrat_y or kolo_y + kolo_s > kwadrat_x or kolo_x > kwadrat_x + kwadrat_s - 1 )
        {
            if( key[ KEY_D ] ) kolo_x++;
           
            return false;
        }
    }
   
    if(( kolo_x + kolo_s - 1 ) < kwadrat_x or kolo_x >( kwadrat_x + kwadrat_s - 1 ) or kolo_y >( kwadrat_y + kwadrat_h ) or kolo_y + kolo_h - 1 < kwadrat_y )
    {
        if( kolo_y > 0 )
        {
            if( key[ KEY_W ] )
            {
                kolo_y--;
                return false;
            }
           
        }
    }
   
    if(( kolo_y + 25 ) < 480 )
    {
        if( kolo_x + kolo_s - 1 < kwadrat_x or kolo_x > kwadrat_x + kwadrat_s - 1 or kolo_y + kolo_h < kwadrat_y or kolo_y > kwadrat_y + kwadrat_h - 1 )
        {
            if( key[ KEY_S ] ) kolo_y++;
           
            return false;
        }
    }
}

//Zmienne
int kolo_x = 100;
int kolo_y = 100;
int kolo_s = 24;
int kolo_h = 25;

int kwadrat_x = 200;
int kwadrat_y = 100;
int kwadrat_s = 70;
int kwadrat_h = 70;

volatile long speed = 0;

//Petla FPSow    
void increment_speed()
{
    speed++;
}
END_OF_FUNCTION( increment_speed );

void spawn()
{
    kolo_x = 10;
    kolo_y = 10;
}
END_OF_FUNCTION( spawn );

void init();
void spawn();

//Zmienne speedowe
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );

//Funkcja main
int main() {
   
    init();
   
   
    install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
   
    //Tworzenie BITMAP
    BITMAP * kolo = NULL;
    BITMAP * bufor = NULL;
    BITMAP * kwadrat = NULL;
   
   
    //Tworzenie BITMAP dalsze
    kolo = create_bitmap( 24, 25 );
    bufor = create_bitmap( 640, 480 );
    kwadrat = create_bitmap( kwadrat_s, kwadrat_h );
   
   
    //Ladowanie tekstur
    kolo = load_bmp( "kolo.bmp", default_palette );
    kwadrat = load_bmp( "kwadrat.bmp", default_palette );
   
   
    //Glowna petla
    while( !key[ KEY_ESC ] ) {
       
       
       
        if( key[ KEY_R ] ) {
            spawn();
        }
       
        while( speed > 0 )
        {
           
            kolizja( kolo_x, kolo_y, kolo_s, kolo_h, kwadrat_x, kwadrat_y, kwadrat_s, kwadrat_h );
           
            speed--;
        }
       
        blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h );
        clear_to_color( bufor, makecol( 55, 45, 147 ) );
        masked_blit( kolo, bufor, 0, 0, kolo_x, kolo_y, kolo->w, kolo->h );
        masked_blit( kwadrat, bufor, 0, 0, kwadrat_x, kwadrat_y, kwadrat->w, kwadrat->h );
       
    }
   
    //Usuwanie
    remove_int( increment_speed );
    destroy_bitmap( kolo );
    destroy_bitmap( bufor );
    destroy_bitmap( kwadrat );
   
    return 0;
}
END_OF_MAIN();

void init()
{
    int depth, res;
    allegro_init();
    depth = desktop_color_depth();
    if( depth == 0 ) depth = 32;
   
    set_color_depth( depth );
    res = set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
    if( res != 0 )
    {
        allegro_message( allegro_error );
        exit( - 1 );
    }
   
    install_timer();
    install_keyboard();
    install_mouse();
   
}
P-53937
xevuel
» 2012-04-06 08:59:17
Przecież masz
volatile long speed = 0;
, a potem warunek
while( speed > 0 )
.

Ja ci radzę, powtórz sobie podstawy, bo w większości przypadków nikomu nie będzie się chciało kompilować kodu, żeby znaleźć ci błędy. Te, które popełniasz, nie wynikają z braku znajomości allegro, ale z braku znajomości podstaw (jak np. średnik po if-ie).
P-53942
RazzorFlame
» 2012-04-06 09:40:06
Tak poza tym:
C/C++
int depth, res;
//...
res = set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
Czyzby struktura BITMAP była int'em?

Edit:
Heh sorry jednak to ja sie pomylilem. Tak dawno nie robilem w allegro ze juz zapomnialem ze tego sie nie robi podobnie jak w SDL("SDL_Surface screen = SDL_SetVideoMode(...);").
P-53943
SeaMonster131
» 2012-04-06 10:07:05
@xevuel:
Ale żeś sie uczepił. Prosze bardzo: » Kurs Allegro 4.x, C++Timery lekcja, a dokładniej dla Ciebie:
C/C++
volatile long speed = 0;
void increment_speed()
{
    speed++;
}
END_OF_FUNCTION( increment_speed );

//...

while( speed > 0 )
{
   
    // Tu wstawiamy procedury, które mają być wykonywane z zadaną częstotliwością.
   
    speed--;
}
Więc o co Ci chodzi, jak tak jest w kursie ? Chyba, że kurs jest źle napisany - to przepraszam.

Tak samo przyczepiłeś sie do średników po if'ach - co za różnica gdzie sobie średnik walne (ale zachowując poprawność kodu) ? Moge nawet sobie dać ich i tysiąc i program będzie pracować tak samo.

Trzeba zawsze najpierw sprawdzić swoje informacje :)
P-53944
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona