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

Problem ( szybkość obiektów )

Ostatnio zmodyfikowano 2012-03-18 22:13
Autor Wiadomość
hakr1921
Temat założony przez niniejszego użytkownika
Problem ( szybkość obiektów )
» 2012-03-18 19:29:21
A więc zamierzam zrobić coś typu gra - Gonią Cię ludzie a ty uciekasz, dotkną Cię i padasz.
Z kolizją problemów nie mam aczkolwiek chodzi o prędkość.
W tutorialu wszystkie obiekty nabierają tej samej prędkości, próbowałem
różnych sposób lecz nie udaje mi się, uczę się pierwszy dzień.
Co zrobić by ludek i botek mieli inne prędkości? Muszę coś wymyśleć
bo bot nie może być aż tak szybki.. poza tym zamierzam zrobić coś typu gra
przetrwanie.

Z góry dzięki za pomoc
C/C++
#include <allegro.h>
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
   
    set_gfx_mode( GFX_AUTODETECT, 640, 480, 0, 0 );
   
    BITMAP * bufor = NULL;
    BITMAP * ludek = NULL;
    BITMAP * botek = NULL;
   
    bufor = create_bitmap( 640, 480 );
    ludek = load_bmp( "ludek.bmp", default_palette );
    botek = load_bmp( "botek.bmp", default_palette );
   
    int ludek_x = 100;
    int ludek_y = 100;
    int botek_x = 50;
    int botek_y = 50;
   
   
    while( !key[ KEY_ESC ] )
    {
        {
            if( key[ KEY_F1 ] ) botek_x = 50, botek_y = 50;
           
            if( key[ KEY_LEFT ] ) ludek_x--;
           
            if( key[ KEY_RIGHT ] ) ludek_x++;
           
            if( key[ KEY_UP ] ) ludek_y--;
           
            if( key[ KEY_DOWN ] ) ludek_y++;
           
            if( ludek_x > botek_x ) botek_x++;
           
            if( ludek_x < botek_x ) botek_x--;
           
            if( ludek_y > botek_y ) botek_y++;
           
            if( ludek_y < botek_y ) botek_y--;
           
        }
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h );
        masked_blit( botek, bufor, 0, 0, botek_x, botek_y, botek->w, botek->h );
        blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
    }
    destroy_bitmap( botek );
    destroy_bitmap( ludek );
    destroy_bitmap( bufor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();

Proszę o wyrozumiałość.
P-52872
SeaMonster131
» 2012-03-18 19:57:39
Najpierw naucz sie » KursyKurs C++ kurs, a dopiero potem pisz gry, bez tego nie dasz sobie rady :)
P-52875
hakr1921
Temat założony przez niniejszego użytkownika
» 2012-03-18 21:07:55
Ogólnie robię to i to.
Lubie podejmować coś podczas nauki by widzieć tego efekty ;)
P-52882
SeaMonster131
» 2012-03-18 21:09:46
Też dobrze, ale żeby pisać gry / programy, to trzeba mieć pojęcie na temat ogólnego programowania - w Twoim wypadku na temat instrukcji warunkowej if, a także zmiennych i operacji na nich ;)
» Kurs C++ » Poziom 1Pojęcie zmiennej i podstawowe typy danych lekcja
» Kurs C++ » Poziom 1Operacje matematyczne lekcja
P-52883
hincu
» 2012-03-18 21:27:06
C/C++
if( key[ KEY_LEFT ] ) ludek_x--;

if( key[ KEY_RIGHT ] ) ludek_x++;

if( key[ KEY_UP ] ) ludek_y--;

if( key[ KEY_DOWN ] ) ludek_y++;

if( ludek_x > botek_x ) botek_x++;

if( ludek_x < botek_x ) botek_x--;

if( ludek_y > botek_y ) botek_y++;

if( ludek_y < botek_y ) botek_y--;


powinno wygladac tak

C/C++
if( key[ KEY_LEFT ] ) ludek_x--;

else if( key[ KEY_RIGHT ] ) ludek_x++;

else if( key[ KEY_UP ] ) ludek_y--;

else if( key[ KEY_DOWN ] ) ludek_y++;

if( ludek_x > botek_x ) botek_x++;

else if( ludek_x < botek_x ) botek_x--;

if( ludek_y > botek_y ) botek_y++;

else if( ludek_y < botek_y ) botek_y--;


ale najpierw naucz sie podstaw bo bez tego nic nie zdzialasz, jesli chcesz aby bot nie biegal szybko to timery witaja
P-52887
hakr1921
Temat założony przez niniejszego użytkownika
» 2012-03-18 22:06:34
@up
Trochę nie rozumiem dlaczego ta zmiana, dzięki niej nie mogę
poruszać się na ukos. Oczywiście jestem newbie w tej dziedzinie bo wiem
że po dwóch dniach nauki niczego nie osiągnę ale wierze w siebie ;)


Załatwiłem sprawę dodając

double spid = 1.0;

Oraz


if( ludek_x > botek_x ) botek_x++, botek_x += spid;


Oczywiście to tylko przykład ;)
P-52893
hincu
» 2012-03-18 22:13:58
nie mozesz poruszac sie na ukos bo ify ktore tam sa sprawdzane sa raz w obiegu petli a w twoim kodzie byly sprawdzane wszystkie po kolei, zreszta sprawdz jak dziala if oraz else if
P-52894
« 1 »
  Strona 1 z 1