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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 267
#1

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

09.03.2014, 19:21. Просмотров 647. Ответов 4
Метки нет (Все метки)

Всем привет!

Вот делаем с друзьями 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, подскажите, каким образом можно это сделать!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2014, 19:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Анимация в игре (C++):

Ошибка в игре - C++
Здравствуйте, я хотел создать игру Танчики. Всё я нарисовал, но снаряд почему-то летит не так ,как должен. Вот код #include...

Ошибка в игре 21 - C++
всем привет. у меня есть ошибка в игре очко, проблема заключается в том что все карты дают число 0, а мне нужно что каждая карта давала...

Реализовать выстрел в игре - C++
Привет программистам данного чудо форума) Помогите мне пожалуйста, мне нужен вот такой код. Что-бы в игре происходил выстрел -_- ...

Меню в игре OpenGL - C++
Подскажите как реализовать меню в Opengl для игры, в этом же окне, не создавай отдельного?

Srand в карточной игре - C++
подскажите как сделать так что бы srand выдавал числа в диапазоне от 1 до 36 без повторов можно ли это сделать без массивов ? ...

Выбор победителя в игре - C++
Вы любите играть в игры? Конечно, любите! Но про эту игру, возможно, ничего не знаете и не слышали даже. Что ж, расскажем о новой игре....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
coloc
погромист
410 / 246 / 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");
Набросал за пару минут, думаю все понятно. Тебе остается реализовать основной функционал.
1
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 267
09.03.2014, 19:57  [ТС] #3
coloc, Дело в том, что я очень слаб пока что в программировании, по этому, делал с офф. сайта SDL, там предоставлен тот пример, что я указал в вопросе, а то что вы накидали, мне не очень понятно, я встречался с таким, но не работал.

В любом случае спасибо
0
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, поэтому сложно разобраться.
0
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 267
09.03.2014, 20:42  [ТС] #5
Megabar, да, о нём. Хорошо, посмотрю, может понятнее станет.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2014, 20:42
Привет! Вот еще темы с ответами:

исправьте ошибки в игре - C++
Всем доброго времени суток. Прошу помощи: 1) Помогите сделать так, если я захожу в пункт меню (Enter'om), то потом не могу пользоваться...

Ориентация бота в игре - C++
Собственно, вопрос следующий, делаю что-то мини бота и меня интересует, как он может ориентироваться в игре, либо можно как-то прочитать по...

Создание паузы в игре - C++
Подскажите, пожалйста, как грамотно можно реализовать паузу в игре? Т.е. чтобы нажать клавишу один раз - меню паузы появилось и при этом...

В игре участвуют двое – А и Б - C++
В игре участвуют двое – А и Б, каждый по очереди ставит свой символ в строку, причем переписывает все что было написано до него...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.03.2014, 20:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru