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

[SFML 1.6] Pomoc w animacji postaci

Ostatnio zmodyfikowano 2012-07-17 19:15
Autor Wiadomość
krystiant94
Temat założony przez niniejszego użytkownika
[SFML 1.6] Pomoc w animacji postaci
» 2012-07-14 16:28:43
Cześć! Przepraszam za taki banał lecz jestem nowy. Chciał bym zrobić animacje postaci w tym wypadku prostego kwadratu + elipsy(aby wyglądało to jak mruganie). Stworzyłem 6 klatek image + sprite, lecz nie wiem jak dobrze je połączyć w jedną całość.  Z góry dzięki za pomoc : )
P-60011
wojownik266
» 2012-07-14 16:40:19
Nie wiem czy dobrze Cię zrozumiałem ale tak się składa ze mam taką prostą animacje pod ręką.

C/C++
#include <iostream>
#include <SFML/Graphics.hpp>

const int ScreenWidth = 640;
const int ScreenHeight = 480;

const int sDown = 128;
const int sLeft = 191;
const int sRight = 64;
const int sUp = 0;

int main()
{
    sf::RenderWindow Window( sf::VideoMode( ScreenWidth, ScreenHeight, 32 ), "CodingMadeEasy Tutorials" );
   
    sf::Image tempImage;
    sf::Sprite playerSprte;
   
   
    if( tempImage.LoadFromFile( "word.jpg" ) )
         playerSprte.SetImage( tempImage );
   
    float velx = 0, vely = 0;
    float x = 320, y = 240, moveSpeed = 0.1;
    int sourceX = 0, sourceY = sDown;
   
    while( Window.IsOpened() )
    {
        sf::Event Event;
        while( Window.GetEvent( Event ) )
        {
            if( Event.Type == sf::Event::Closed || Event.Key.Code == sf::Key::Escape )
                 Window.Close();
           
        }
       
        if( Window.GetInput().IsKeyDown( sf::Key::Right ) )
        {
            sourceY = sRight;
            velx = moveSpeed;
        }
        else if( Window.GetInput().IsKeyDown( sf::Key::Left ) )
        {
            sourceY = sLeft;
            velx = - moveSpeed;
        }
        else
             velx = 0;
       
        if( Window.GetInput().IsKeyDown( sf::Key::Up ) )
        {
            sourceY = sUp;
            vely = - moveSpeed;
        }
        else if( Window.GetInput().IsKeyDown( sf::Key::Down ) )
        {
           
            sourceY = sDown;
            vely = moveSpeed;
        }
        else
             vely = 0;
       
        x += velx;
        y += vely;
       
        if( velx != 0 || vely != 0 )
             sourceX += tempImage.GetWidth() / 4;
        else
             sourceX = 0;
       
        if( sourceX == tempImage.GetWidth() / 4 )
             sourceX = 0;
       
        Window.Clear();
        playerSprte.SetSubRect( sf::IntRect( sourceX, sourceY, sourceX + tempImage.GetWidth() / 4, sourceY + tempImage.GetHeight() / 4 ) );
        playerSprte.SetPosition( x, y );
        Window.Draw( playerSprte );
        Window.Display();
    }
    return 0;
}
P-60013
krystiant94
Temat założony przez niniejszego użytkownika
» 2012-07-14 16:58:55
To jest animacja poruszania się, a mi chodzi o animacje postaci. Po naciśnięciu  np przycisku, ma zostać w prawidłowy sposób wyświetlonych 6 klatek postaci.
P-60014
wojownik266
» 2012-07-14 17:08:27
Tutaj jest bardzo fajna animacja postaci + scrolowanie tła. Do celów edukacyjnych wydaje mi się że jest ok. A gdy by było inaczej, proszę o wybaczenie!
http://www.codingmadeeasy.ca/c-sfml-made-easy/c-sfml-made-easy-tutorial-1116-advanced-sprite-animation-screen-scrolling
P-60016
m4tx
» 2012-07-14 17:18:26
To jest animacja poruszania się, a mi chodzi o animacje postaci. Po naciśnięciu  np przycisku, ma zostać w prawidłowy sposób wyświetlonych 6 klatek postaci.
Przerobić wystarczy...
P-60017
wojownik266
» 2012-07-14 17:22:59
Bardzo ładnie to ująłeś! Dokładnie tak jest jak rzekłeś!
P-60018
krystiant94
Temat założony przez niniejszego użytkownika
» 2012-07-14 20:14:38
Napisałem już prostą animacje, lecz wygląda ona mniej więcej tak :

C/C++
if( sprawdzenie ) {
    if( Clock.GetElapsedTime() < 0.1 ) okno.Draw( buzia[ 0 ] );
   
    if( Clock.GetElapsedTime() >= 0.2 && Clock.GetElapsedTime() < 0.3 ) okno.Draw( buzia[ 1 ] );
   
    if( Clock.GetElapsedTime() >= 0.3 && Clock.GetElapsedTime() < 0.4 ) okno.Draw( buzia[ 2 ] );
   
    if( Clock.GetElapsedTime() >= 0.4 && Clock.GetElapsedTime() < 0.5 ) okno.Draw( buzia[ 3 ] );
...................................

Jak myślicie, jak to upchnąć w jedną pętle ?
P-60044
krystiant94
Temat założony przez niniejszego użytkownika
» 2012-07-16 00:29:15
Jeżeli mam na jednym obrazie po kolei narysowane 3 pozycje postaci(poruszanie się) w 4 rzędach odpowiadających podanym kierunkom, to jak po wycięciu i wprowadzeniu animacji(która już zrobiłem) prawidłowo ustawić getposition i getsize.x dla podanego obrazu ? Bo po zrobieniu kolizji dla animacji przesuwa się cały obraz a nie jego dana część ..
P-60128
« 1 » 2
  Strona 1 z 2 Następna strona