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

[SFML, C++] Grawitacja

Ostatnio zmodyfikowano 2011-08-08 17:21
Autor Wiadomość
Dark
Temat założony przez niniejszego użytkownika
» 2011-08-08 14:28:41
Aby zrobić maksymalną siłę skoku to co dokładnie trzeba określić?
P-38396
DejaVu
» 2011-08-08 14:29:59
1) Poczytaj książkę ze szkoły od fizyki...
2) Poczytaj tematy na forum, np. allegro platformówka
P-38397
Dark
Temat założony przez niniejszego użytkownika
» 2011-08-08 14:34:25
Wiem, że wtedy jest ruch jednostajnie opóźniony, znam się na fizyce, tylko nie potrafię tego zorganizować w kodzie.

@edit
Już zrobiłem na sztywno poruszanie się w dół obrazka.

@edit2
Czemu podczas poruszania się sprite'a dopóki nie wyląduje na powierzchni za nim jest powielony sprite?


C/C++
#include "head.h"
#include <iostream>


bool Kolizja( Poz * A, Poz * B )
{
    if( A->x >=( B->x + B->w ) )
         return false;
   
    if(( A->x + A->w ) <= B->x )
         return false;
   
    if( A->y >=( B->y + B->h ) )
         return false;
   
    if(( A->y + A->h ) <= B->y )
         return false;
   
    return true;
}



int main()
{
   
    sf::RenderWindow oA( sf::VideoMode( 800, 600, 32 ), "Crion" );
    sf::Image obrazek, mapa;
    mapa.LoadFromFile( "mapa.bmp" );
    obrazek.LoadFromFile( "ludek.bmp" );
    double y = 1.0;
    Poz pozycja;
    Poz pozycja1;
   
    sf::Shape prostokat = sf::Shape::Rectangle( 100, 400, 500, 500, sf::Color::Green, 2, sf::Color::Blue );
   
    sf::Sprite boh, mapasp;
    mapasp.SetImage( mapa );
   
    boh.SetImage( obrazek );
    boh.SetPosition( 300, 200 );
    boh.SetScale( 2, 2 );
    obrazek.CreateMaskFromColor( sf::Color( 255, 255, 255 ), 0 );
   
    pozycja1.x = 100;
    pozycja1.y = 400;
    pozycja1.w = 400.0f;
    pozycja1.h = 100.0f;
   
    double dt = 0;
   
    while( oA.IsOpened() )
    {
        dt = oA.GetFrameTime();
        sf::Event zdarzenie;
       
        while( oA.GetEvent( zdarzenie ) )
        {
            if( zdarzenie.Type == sf::Event::Closed )
                 oA.Close();
           
            if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape )
                 oA.Close();
           
        }
       
        const sf::Input & ruch = oA.GetInput();
       
        pozycja.x = boh.GetPosition().x;
        pozycja.y = boh.GetPosition().y;
        pozycja.w =( obrazek.GetWidth() * 2 );
        pozycja.h =( obrazek.GetHeight() * 2 );
       
        if( ruch.IsKeyDown( sf::Key::W ) )
             boh.Move( 0, - 1.5 );
       
        if( ruch.IsKeyDown( sf::Key::A ) )
             boh.Move( - 1, 0 );
       
        if( ruch.IsKeyDown( sf::Key::D ) )
             boh.Move( 1, 0 );
       
        if( !Kolizja( & pozycja, & pozycja1 ) )
        {
            boh.Move( 0, y );
        }
       
        if( Kolizja( & pozycja, & pozycja1 ) )
       
       
             oA.Draw( mapasp );
       
        oA.Draw( prostokat );
        oA.Draw( boh );
        oA.Display();
    }
    return 0;
}

}
P-38398
DejaVu
» 2011-08-08 16:44:14
A czyścisz ekran co klatkę? :)
P-38414
Dark
Temat założony przez niniejszego użytkownika
» 2011-08-08 16:56:37
Nie, robi się to metodą Okno.Clear() ?

@edit Wnioskuję, że nie tylko tym bo mi plansza znika na chwilę dopóki się nie załaduje.
P-38416
DejaVu
» 2011-08-08 17:03:07
P-38417
Dark
Temat założony przez niniejszego użytkownika
» 2011-08-08 17:07:07
Ok, już nie znika
@edit Dalej grawitację to chyba trzeba poprawić już mając gdzieś umieszczone jakieś właściwości to mam użyć kontenera na dane i umieszczać dane gdzieś w pliku, czy sam kontener wystarczy?

P-38418
DejaVu
» 2011-08-08 17:17:38
Gry za Ciebie pisać nie będziemy. Czego użyjesz to Twoja sprawa. Błąd, który podałeś nie nawiązuje do tematu. U nas panuje zasada: 1 problem = 1 temat.
P-38419
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona