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

Allegro - Grawitacja

Ostatnio zmodyfikowano 2011-04-16 11:30
Autor Wiadomość
dmx81
» 2011-04-15 19:30:10
np tutaj
:)
swoja droga, wez wikipedie, wyszukaj podstawowe wzory fizyczno-matematyczne na rozklad sil na rowni pochylej + troszke wyobrazni i przelej to na kod
P-30820
ison
» 2011-04-15 19:34:40
grawitacja to zbyt ogólne pojęcie, to zależy czy chcesz zrobić tylko poruszanie się bitmapy po ekranie i przyciąganie jej w dół jeśli nie stoi na niczym, czy też coś bardziej skomplikowanego
P-30821
McAffey
» 2011-04-15 19:40:14
Po za tym nie znajdziesz nigdzie takiej wersji która będzie w 100% kompatybilna z twoją grą, dopóki sam jej nie napiszesz.
P-30822
Daavis
Temat założony przez niniejszego użytkownika
» 2011-04-15 20:05:38
Chcę żeby bitmape przyciągało do podłogi .

F=G*m1*m2:r2*e taki wzór wyczytałem .
gdzie:
G – stała grawitacji,
m1 - masa pierwszego ciała
,m2 – masa drugiego ciała,
x – wektor łączący środki mas obu ciał, a
r jest długością tego wektora,

Czyli musiałbym zrobić :
Nie wiem co dać do masy więc dam swoją wagę .
W 2 masie też nie wiem więc dam to co w m1.
Wektor też nie wiem.
int g = 10;
int m1 = 66;
int m2 = 66;
int x;
int r;

Tak nawet jak bym wiedział co wpisać to i tak umiał bym zrobić tylko zmienne .

Nie wiem po co ale może się przyda kod gry testowej :
 

#include <allegro.h>
// zmienne
int tlo_x = 0, tlo_y = 0;
int kula_x = 100;
int kula_y = 100;
int kula_klatka = 0;
int kula_kierunek = 0;
int frame = 0;
int speed = 5;
volatile long speed1 = 0;
//koniec zmiennych

//BITMAPY
BITMAP * kula = NULL;
BITMAP * bufor = NULL;
BITMAP * tlo = NULL;
BITMAP * ziemia = NULL;
//Koniec BITMAP



// funkcje
void increment_speed1()
{
    speed1++;
}
END_OF_FUNCTION( increment_speed1 );

void instalowanie()
{
install_keyboard();
set_color_depth( 16 );
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
clear_to_color( screen, makecol( 128, 128, 128 ) );
install_timer();
install_int_ex( increment_speed1, BPS_TO_TIMER( 100 ) );
}
void ON()
{
allegro_init();
}
void niszczenie()
{
 destroy_bitmap( kula );
destroy_bitmap( bufor );
remove_int( increment_speed1 );
}
void bufor_new()
{
bufor = create_bitmap( 800, 600 );
if( !bufor )
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "Nie mogê utworzyæ bufora !" );
    allegro_exit();

}
}
void sterowanie()
{
while( !key[ KEY_ESC ] )
{
  while( speed1 > 0  && !key[ KEY_ESC ])
{
        if( key[ KEY_LEFT ] )
    {
            kula_x = kula_x - speed;
            kula_kierunek = 4;
            if (kula_x<-10) kula_x = kula_x + speed;
    }
        if( key[ KEY_RIGHT ] )
    {
            kula_x = kula_x + speed;
            kula_kierunek = 2;
            if (kula_x>750) kula_x = kula_x - speed;
    }
        if( key[ KEY_UP ] )
    {
            kula_y = kula_y - speed;
            kula_kierunek = 1;
        if(kula_y<0) kula_y = kula_y + speed;


    }
        if( key[ KEY_DOWN ] )
    {
            kula_y = kula_y + speed;
            kula_kierunek = 3;
        if(kula_y>515) kula_y = kula_y - speed;

    }

if( frame > 10) frame=0;

if( frame<5)
{
    kula_klatka = 0;
}

else if( frame>=5 && frame<10)
{
    kula_klatka = 1;
}
speed1--;
frame++;
clear_to_color( bufor, makecol( 150, 150, 150 ) );
rest(20);
masked_blit( tlo, bufor, 0, 0, tlo_x, tlo_y, 800,600);
blit( ziemia, bufor, 0, 0, 0, 570, 800 ,30 );
// kula
masked_blit( kula, bufor, kula_kierunek*60, kula_klatka*60, kula_x, kula_y,60,60);
// kula
blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
kula_kierunek = 0;




}
}
}

void kula_new()
{
kula = load_bmp( "Data/Image/kula_spoczynek.bmp", default_palette );
if( !kula )
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "nie mogê za³adowaæ obrazka Kula !" );
    allegro_exit();
}


}
void OFF()
{
    allegro_exit();
}
void tlo_new()
{
 tlo = load_bmp( "Data/Image/tlo.bmp", default_palette );
if( !tlo )
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "nie mogê za³adowaæ obrazka tlo !" );
    allegro_exit();

}
}
void ziemia_new()
{
ziemia = load_bmp( "Data/Image/ziemia.bmp",default_palette);
if( !ziemia )
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "nie mogê za³adowaæ obrazka ziemia !" );
    allegro_exit();

}
}

//koniec funkcji




int main()
{

ON();
instalowanie();
bufor_new();
kula_new();
tlo_new();
ziemia_new();
sterowanie();
niszczenie();
OFF();

return 0;
}
END_OF_MAIN();



P-30825
DejaVu
» 2011-04-15 20:12:51
@pekfos: postaraj się nie obrażać użytkowników - wiem, że momentami to trudne i same słowa się cisną no ale jak już masz taki stan to po prostu udaj, że tego tematu nie czytałeś ;p
P-30828
Daavis
Temat założony przez niniejszego użytkownika
» 2011-04-15 21:01:25
Może dla was to wydaje się łatwe ale wy na pewno macie ponad 20 lat i już to umiecie . Zazwyczaj szybko się uczę nowych rzeczy ale ta grawitacja ... Wstawcie się na moim miejscu kiedy jeszcze tego nie umieliście .
P-30830
McAffey
» 2011-04-15 21:27:10
A timery umiesz obsługiwać ;) ?

edit: Przypomniało mi się coś : http://cpp0x.pl/forum/temat/?id=3237. Kolega tam udostępnił kod, więc myślę że możesz zobaczyć jak może działać taka grawitacja i na tej podstawie zrobisz swoją ;)
P-30831
malan
» 2011-04-15 22:20:11
@Daavis:
1. » KursyKurs STC kurs
2.
(...)wy na pewno macie ponad 20 lat(...)
Nie koniecznie ;p

Kiedyś, tam coś kombinowałem ze skakaniem w Allegro i moja "grawitacja" wyglądał dosłownie tak:
C/C++
bool jump = false, goDown = false;
while( !key[ KEY_ESC ] )
{
    while( speed > 0 )
    {
        //...
        if( key[ KEY_UP ] ) jump = true;
       
        if( jump )
        {
            if( !goDown && ludek_y > 30 ) ludek_y--;
            else
            {
                goDown = true;
                if( ludek_y < 120 ) ludek_y++;
                else goDown = jump = false;
               
            }
        }
        speed--;
    }
    //...
}
Po prostu-
ludek_y++;
. To były czasy ^^
P-30847
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona