Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 12
1

Платформер

11.06.2014, 09:16. Показов 1493. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, начал изучать SFML библиотеки по вот этому уроку ----> http://www.youtube.com/watch?v=T6o5OlgsCew

Но при первой проверки работоспособности анимации у меня выскакивают ошибки, часть из них я решил, но эти не могу понять ни как. Прикладываю код
anim.h

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
85
86
87
88
89
90
91
92
93
94
95
96
97
#ifndef ANIM_H
#define ANIM_H
 
#include <SFML\Graphics.hpp>
using namespace sf;
 
class Animation
{
public:
    std::vector<IntRect> frames, frames_flip;
    float currentFrame, speed;
    bool flip, isPlaying;
    Sprite sprite;
 
    Animation(Texture &t, int x, int y, int w, int h, int count, float Speed, int step)
    {
        speed = Speed;
        sprite.setTexture(t);
 
        currentFrame = 0;
        isPlaying=true;
        flip=false;
 
        for(int i = 0; i < count; i++)
        {
            frames.push_back(IntRect(x+i*step, y, w , h));
            frames_flip.push_back(IntRect(x+i*step+w, y, -w, h));
 
        }
 
 
    }
 
    void tick(float time)
    {
        if(!isPlaying)
            return;
        currentFrame += speed * time;
        if(currentFrame > frames.size())
            currentFrame -= frames.size();
 
        int i = currentFrame;
        sprite.setTextureRect(frames[i]);
        if(flip)
            sprite.setTextureRect(frames_flip[i]);
    }
};
 
class AnimationManager
{
public:
    String currentAnim;
    std::map<String, Animation>animList;
 
    AnimationManager()
    {}
 
    void create(String name, Texture &t, int x, int y, int w, int h, int count, float speed, int step)
    {
        animList[name] = Animation(t, x, y, w, h, count, speed, step);
        currentAnim = name;
 
    }
 
    void draw(RenderWindow &window, int x=0, int y=0)
    {
        animList[currentAnim].sprite.setPosition(x, y);
        window.draw(animList[currentAnim].sprite);
    }
 
    void set(String name)
    {
        currentAnim = name;
    }
 
    void flip(bool b)
    {
        animList[currentAnim].flip = b;
    }
 
    void tick(float time)
    {
        animList[currentAnim].tick(time);
    }
 
    void pause()
    {
        animList[currentAnim].isPlaying = false;
    }
 
    void play()
    {
        animList[currentAnim].isPlaying = true;
    }
};
 
#endif ANIM_H
main.cpp

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
#include <SFML/Graphics.hpp>
#include "anim.h"
 
int main()
{
    RenderWindow window(VideoMode(250, 150), "SFML works");
    
    Texture q;
    q.loadFromFile("fanq.png");
 
    AnimationManager anim;
    anim.create("walk", q, 0, 244, 40, 50, 6, 0.005, 40);
    anim.create("jump", q, 0, 528, 29, 30, 4, 0.0045, 38);
    anim.create("duck", q, 0, 436, 80, 20, 1, 0.005);
    anim.create("stay", q, 0, 187, 42, 52, 3, 0.002, 42);
    anim.create("shoot", q, 0, 572, 45, 62, 5, 0.004, 45);
 
    anim.set("stay");
 
    if(Keyboard::isKeyPressed(Keyboard::Right))
        anim.set("walk");
    if(Keyboard::isKeyPressed(Keyboard::Left))
        anim.set("walk");
    if(Keyboard::isKeyPressed(Keyboard::Up))
        anim.set("jump");
    if(Keyboard::isKeyPressed(Keyboard::Down))
        anim.set("duck");
    if(Keyboard::isKeyPressed(Keyboard::Space))
        anim.set("shoot");
 
    anim.tick(time);
 
    window.clear(Color(275,255,255));
    anim.draw(window, 50, 100);
 
    window.display();
 
};
У меня все в точности, как на видео, подскажите пожалуйста, от чего они и как решить, уже 2 дня мучаюсь((

Вот ошибки:
c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\anim.h(42): warning C4244: инициализация: преобразование "float" в "int", возможна потеря данных
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\anim.h(67): warning C4244: аргумент: преобразование "int" в "float", возможна потеря данных
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\anim.h(67): warning C4244: аргумент: преобразование "int" в "float", возможна потеря данных
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\main.cpp(12): warning C4305: аргумент: усечение из "double" к "float"
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\main.cpp(13): warning C4305: аргумент: усечение из "double" к "float"
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\main.cpp(14): error C2660: AnimationManager::create: функция не принимает 8 аргументов
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\main.cpp(15): warning C4305: аргумент: усечение из "double" к "float"
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\main.cpp(16): warning C4305: аргумент: усечение из "double" к "float"
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\main.cpp(31): error C2664: AnimationManager::tick: невозможно преобразовать параметр 1 из "time_t (__cdecl *)(time_t *)" в "float"
1> Контекст не позволяет устранить неоднозначность перегруженной функции
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\main.cpp(33): warning C4305: аргумент: усечение из "int" к "sf::Uint8"
1>c:\users\donaut\documents\visual studio 2010\projects\games\plats\plats\main.cpp(33): warning C4309: аргумент: усечение константного значения

P.s. Не знаю точно, в ту или не ту тему написал. Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2014, 09:16
Ответы с готовыми решениями:

2D платформер
Помогите сделать 2D платформер (Ссылка на сторонний ресурс удалена) Не получается физика...

Платформер на С++ и SFML
Вообщем. Сделал платформем. Есть проблема с переходом с уровня на уровень. Кто создавал игры на с++...

Java платформер
Кто знает какую-нибудь хорошую книгу\статью про создание сетевых игр на Java, в которых важна...

Время на платформер
Всем доброго времени суток! Думаю начать учить с++. Вот думаю если сделать платформер, сколько...

2
Эксперт С++
3574 / 2828 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 22
11.06.2014, 18:46 2
ошибок у вас 2. Остальное предупреждение (программа скомпилируется, но будет ли правильно работать это вопрос).

компилятор вам чётко сказал что делать. Ваша функция create должна принимать 9 значений, а вот тут у вас
C++
1
anim.create("duck", q, 0, 436, 80, 20, 1, 0.005);
их 8. Исправляйте.

ну и разберитесь с типами переменных, тогда все предупреждения исчезнут.
1
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 12
12.06.2014, 08:04  [ТС] 3
Я уже менял значения, добавлял 9, ругаться переставал, о вот с типами данных я ни как не пойму, что да как и почему на видео работает, а у меня нет, у него кстати (на видео = он) тоже 8 значений) Помогите пожалуйста, если не сложно, разобраться с переменными.
0
12.06.2014, 08:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2014, 08:04
Помогаю со студенческими работами здесь

Игра платформер
Привет всем! Я программирую в Visual Studio C++ 2010. Я задался вопросом о том, как сделать игру...

Платформер с анимацией
Всем привет!!! Делаю платформер на андроид, но у меня сложности с бегом персонажа. Если кому не...

Движение персонажа 2d платформер
Здравствуйте! Нужно сделать движение персонажа в 2д платформере, пока что только влево/вправо....

Платформер в стиле марио
Здавтсвуйте, вот надо писать курсач и темя я выбрал видать не самую лёгкую:fie:. Так вот нужно...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru