Форум программистов, компьютерный форум CyberForum.ru

Анимация в игре - C++

Восстановить пароль Регистрация
 
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
09.03.2014, 19:21     Анимация в игре #1
Всем привет!

Вот делаем с друзьями 2D платформер. Я использую SDL библиотеку. У меня получилось сделать движения влево и вправо и соответствующую анимацию для движения, с помощью вот такой штуки:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
void set_clips()
{
    //Clip the sprites
    clipsRight[ 0 ].x = 0;
    clipsRight[ 0 ].y = 0;
    clipsRight[ 0 ].w = FOO_WIDTH;
    clipsRight[ 0 ].h = FOO_HEIGHT;
 
    clipsRight[ 1 ].x = FOO_WIDTH;
    clipsRight[ 1 ].y = 0;
    clipsRight[ 1 ].w = FOO_WIDTH;
    clipsRight[ 1 ].h = FOO_HEIGHT;
 
    clipsRight[ 2 ].x = FOO_WIDTH * 2;
    clipsRight[ 2 ].y = 0;
    clipsRight[ 2 ].w = FOO_WIDTH;
    clipsRight[ 2 ].h = FOO_HEIGHT;
 
    clipsRight[ 3 ].x = FOO_WIDTH * 3;
    clipsRight[ 3 ].y = 0;
    clipsRight[ 3 ].w = FOO_WIDTH;
    clipsRight[ 3 ].h = FOO_HEIGHT;
 
    clipsRight[ 4 ].x = FOO_WIDTH * 4;
    clipsRight[ 4 ].y = 0;
    clipsRight[ 4 ].w = FOO_WIDTH;
    clipsRight[ 4 ].h = FOO_HEIGHT;
 
    clipsRight[ 5 ].x = FOO_WIDTH * 5;
    clipsRight[ 5 ].y = 0;
    clipsRight[ 5 ].w = FOO_WIDTH;
    clipsRight[ 5 ].h = FOO_HEIGHT;
 
    clipsRight[ 6 ].x = FOO_WIDTH * 6;
    clipsRight[ 6 ].y = 0;
    clipsRight[ 6 ].w = FOO_WIDTH;
    clipsRight[ 6 ].h = FOO_HEIGHT;
 
    clipsRight[ 7 ].x = FOO_WIDTH * 7;
    clipsRight[ 7 ].y = 0;
    clipsRight[ 7 ].w = FOO_WIDTH;
    clipsRight[ 7 ].h = FOO_HEIGHT;
    /////////////////////////////
 
    clipsLeft[ 0 ].x = 0;
    clipsLeft[ 0 ].y = FOO_HEIGHT;
    clipsLeft[ 0 ].w = FOO_WIDTH;
    clipsLeft[ 0 ].h = FOO_HEIGHT;
 
    clipsLeft[ 1 ].x = FOO_WIDTH;
    clipsLeft[ 1 ].y = FOO_HEIGHT;
    clipsLeft[ 1 ].w = FOO_WIDTH;
    clipsLeft[ 1 ].h = FOO_HEIGHT;
 
    clipsLeft[ 2 ].x = FOO_WIDTH * 2;
    clipsLeft[ 2 ].y = FOO_HEIGHT;
    clipsLeft[ 2 ].w = FOO_WIDTH;
    clipsLeft[ 2 ].h = FOO_HEIGHT;
 
    clipsLeft[ 3 ].x = FOO_WIDTH * 3;
    clipsLeft[ 3 ].y = FOO_HEIGHT;
    clipsLeft[ 3 ].w = FOO_WIDTH;
    clipsLeft[ 3 ].h = FOO_HEIGHT;
 
    clipsLeft[ 4 ].x = FOO_WIDTH * 4;
    clipsLeft[ 4 ].y = FOO_HEIGHT;
    clipsLeft[ 4 ].w = FOO_WIDTH;
    clipsLeft[ 4 ].h = FOO_HEIGHT;
 
    clipsLeft[ 5 ].x = FOO_WIDTH * 5;
    clipsLeft[ 5 ].y = FOO_HEIGHT;
    clipsLeft[ 5 ].w = FOO_WIDTH;
    clipsLeft[ 5 ].h = FOO_HEIGHT;
 
    clipsLeft[ 6 ].x = FOO_WIDTH * 6;
    clipsLeft[ 6 ].y = FOO_HEIGHT;
    clipsLeft[ 6 ].w = FOO_WIDTH;
    clipsLeft[ 6 ].h = FOO_HEIGHT;
 
    clipsLeft[ 7 ].x = FOO_WIDTH * 7;
    clipsLeft[ 7 ].y = FOO_HEIGHT;
    clipsLeft[ 7 ].w = FOO_WIDTH;
    clipsLeft[ 7 ].h = FOO_HEIGHT;
}
Теперь я хочу сделать, чтобы, когда персонаж не двигается, включалась определенная картинка(персонаж смотрит на играющего человека).

Кто работал с SDL, подскажите, каким образом можно это сделать!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2014, 19:21     Анимация в игре
Посмотрите здесь:

Вопрос по игре арканоид C++
C++ исправьте ошибки в игре
C++ Ошибка в игре
В игре участвуют двое – А и Б C++
Коллизии в 2d игре на C++ SFML
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
09.03.2014, 19:43     Анимация в игре #2
Leonman, То, что ты делаешь - ИМХО быдлокод. Создай класс анимации. Что то вроде этого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Animation
{
    public:
        Animation()
        void load(const std::string &filename);
 
        int maxFrame;
        int currentFrame;
        bool isPlaying;
        bool repeatAnimation;
 
        std::vector <SDL_Rect> frames;
        SDL_Texture *texture;
};
 
 
 
class AnimationManager
{
    public:
    void setCurrentAnimation(const std::string &anim);
    std::map <std::string, Animation> animations;
};
 
///////////////////////
AnimationManager playerManager;
Animation walk;
walk.load(...);
Animation stand;
stand.load()
 
playerManager.animations["walk"] = walk;
playerManager.animations["stand"] = stand;
playerManager.setCurrentAnimation("stand");
 
//if key == up then
playerManager.setCurrentAnimation("walk");
Набросал за пару минут, думаю все понятно. Тебе остается реализовать основной функционал.
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
09.03.2014, 19:57  [ТС]     Анимация в игре #3
coloc, Дело в том, что я очень слаб пока что в программировании, по этому, делал с офф. сайта SDL, там предоставлен тот пример, что я указал в вопросе, а то что вы накидали, мне не очень понятно, я встречался с таким, но не работал.

В любом случае спасибо
Megabar
22 / 22 / 3
Регистрация: 01.12.2013
Сообщений: 93
09.03.2014, 20:30     Анимация в игре #4
Цитата Сообщение от Leonman Посмотреть сообщение
делал с офф. сайта SDL, там предоставлен тот пример
вы говорите о http://lazyfoo.net/SDL_tutorials/lesson20/index.php

Скорее всего вы пропустили темы таймера и FPS, поэтому сложно разобраться.
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
09.03.2014, 20:42  [ТС]     Анимация в игре #5
Megabar, да, о нём. Хорошо, посмотрю, может понятнее станет.
Yandex
Объявления
09.03.2014, 20:42     Анимация в игре
Ответ Создать тему
Опции темы

Текущее время: 04:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru