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

pytanie na temat czasu rzeczywistego [allegro]

Ostatnio zmodyfikowano 2011-01-07 07:41
Autor Wiadomość
96microsoft
Temat założony przez niniejszego użytkownika
pytanie na temat czasu rzeczywistego [allegro]
» 2011-01-05 14:52:54
Witam. Napisałem coś takiego "ptymitywnego ;P" tak aby poćwiczyć zwykły ludzik który lata za pomocą strzałek po ekranie i po naciśnięciu spacji wypuszcza pocisk a on potem wybucha. Tylko jest jeden szczegół, jak jestem ludzikiem na dole ekranu to po naciśnięciu spacji pocisk leci a ja nic nie mogę się ludzikiem ruszać. A chciałbym aby można było jeszcze się ruszać i jeden za drugim wystrzeliwać.
oto kod:

#include<allegro.h>
int main()
{
    allegro_init();
    install_keyboard();
    BITMAP* ceo=NULL;
    BITMAP* bufor=NULL;
    BITMAP* pocisk=NULL;
    BITMAP* ch=NULL;
    int px,py;
    set_color_depth(32);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED,600,400,0,0);
    clear_to_color(screen,makecol(123,12,2));
    ch=load_bitmap("chmura.bmp",default_palette);
          if(!ch)
        {
                  set_gfx_mode(GFX_TEXT,0,0,0,0);
                   allegro_message("zle");
                   allegro_exit;
            return 0;
        }
    pocisk=load_bitmap("st.bmp",default_palette);
        if(!pocisk)
  {
    set_gfx_mode(GFX_TEXT,0,0,0,0);
    allegro_message("zle");
    allegro_exit();
    return 0;
  }
    ceo=load_bmp("lo.bmp",default_palette);
          if(!ceo)
  {
    set_gfx_mode(GFX_TEXT,0,0,0,0);
    allegro_message("zle");
    allegro_exit();
    return 0;
  }
      bufor=create_bitmap(600,400);
         if(!bufor)
 {
       set_gfx_mode(GFX_TEXT,0,0,0,0);
       allegro_message("zle");
       allegro_exit();
    return 0;
}
int lx=1;
int ly=1;

  
    while(!key[KEY_ESC])
   
    {
                          px=lx+20;
                       py=ly;
if(key[KEY_LEFT])
{
                 if(lx>0) lx--;
}
if(key[KEY_RIGHT])
{
        if(lx<500) lx++;
                
}
if(key[KEY_UP])

               if(ly>0) ly--;
                               
}
if(key[KEY_DOWN])
{       
         if(ly<350) ly++;
}
if(key[KEY_SPACE])
{        if(py>20)
{
    while(py!=0)
      {
                py--;
         clear_to_color(bufor,makecol(123,12,2));
           masked_blit(ceo,bufor,0,0,lx,ly,ceo->w,ceo->h);
                 masked_blit(pocisk,bufor,0,0,px+60,py,pocisk->w,pocisk->h);
                        blit(bufor,screen,0,0,0,0,bufor->w,bufor->h);
           rest(2);}
           clear_to_color(bufor,makecol(123,12,2));
           masked_blit(ch,bufor,0,0,px,py,ch->w,ch->h);
           masked_blit(ceo,bufor,0,0,lx,ly,ceo->w,ceo->h);
              blit(bufor,screen,0,0,0,0,bufor->w,bufor->h);
               rest(200);
       
                                                  
      
                                      
         }
                                                   
}
                                  rest(2);
   clear_to_color(bufor,makecol(123,12,2));
    masked_blit(ceo,bufor,0,0,lx,ly,ceo->w,ceo->h);
//masked_blit(pocisk,bufor,0,0,px+60,py,pocisk->w,pocisk->h);
    blit(bufor,screen,0,0,0,0,bufor->w,bufor->h);

}
   
    allegro_exit();
}
END_OF_MAIN();
z góry dziękuję i jeszcze może macie jakieś uwagi co do tego programu ale dopiero zaczynam z allegro. :P.
p.s chciałem zrobić w drugiej pętli "while" wstawić obsługę strzałek tak jak w pierwszej pętli ale to będzie za długi kod. Trzeba inne rozwiązanie zrobić :/ POzdrawiam
P-26220
SeaMonster131
» 2011-01-05 15:24:44
Po co Ci ta pętla while(py!=0) ? :)
zamiast tego możesz napisać np if(py > 0) to wtedy nie będzie to wstrzymywać gry. I wtedy wywal te rysowanie bufora na screenie itd...w tejże pętli.
P-26221
96microsoft
Temat założony przez niniejszego użytkownika
» 2011-01-05 16:04:36
A słyszałem o takim czymś jak czas rzeczywisty. Mógłby mi ktoś wytłumaczyć jak to się robi?? na krótkiej gierce lub coś. np na mojej :) Pozdrawiam.
P-26222
Łukasz123
» 2011-01-05 17:11:55
P-26224
96microsoft
Temat założony przez niniejszego użytkownika
» 2011-01-05 17:29:27
Moja lekka dygresja. Nie chodzi tu o timery. chodzi o to że jak wykonuje jakąś czynność to mogę wykonać jeszcze inną w tym samym czsie. np. strzelam i podczas strzałów mogę się poruszać i strzelać seriami, a nie jak w moim programie jest że najpierw muszę poczekać zanim jeden pocisk wybuchnie to dopiero potem muszę wypuszczać drugi. i jak leci to nie mogę nawet się ruszać ludzikiem :/
P-26226
waxx
» 2011-01-05 17:36:44
To nie ma nic wspolnego z zadnym dziwnym pojeciem ktore tu rzuciles.

Zreorganizuj swoj kod i tyle.
P-26227
pekfos
» 2011-01-05 17:37:24
to widzę ze nawet nie wiesz co ma na celu technika czasu rzeczywistego. Twój kod jest po prostu do niczego. te zadania których oczekujesz od nieznanej ci techniki można zrealizować tak:
C/C++
vector < COORD > pociski;
//..
if( key[ KEY_SPACE ] ) {
    COORD coord;
    coord.X = posx;
    coord.Y = posy;
    pociski.push_back( coord );
}
//poruszanie

for( size_t a = 0; a < pociski.size(); ++a ) {
    pociski[ a ].X += 5;
}

//rysowanie itp
P-26228
96microsoft
Temat założony przez niniejszego użytkownika
» 2011-01-05 19:08:15
a co jest w moim kodzie takiego złego??? Przecież to narazie Pierwszy program w allegro (wcześniej Dużo pisałem w c++) a że trochę zagmatwałem w w 1 i 2 pętli to tak na spontana było. Teraz powoli widzę po przeanalizowaniu, że 2 pętla jest praktycznie nie potrzebna. A  wektory narazie zostawie w spokoju. POzdrawiam
P-26229
« 1 » 2 3
  Strona 1 z 3 Następna strona