Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 29.03.2023
Сообщений: 2
1

Пытаюсь сделать платформер

29.03.2023, 19:53. Показов 678. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решил попробовать написать игру на c++ с использованием sfml. Написал вроде как правильно, но столкновения работают неправильно, не понимаю, что не так. Вот собранный проект https://cloud.mail.ru/public/z8Z1/Jp2FzUhSc. Прошу помочь с этой проблемой.

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#include <SFML/Graphics.hpp>
#include <string>
#include <cmath>
#include <fstream>
 
using namespace std;
using namespace sf;
 
short int wrld[20][10];
 
class pl
{
    public:
    short int dir, chrOfst;
    float dx, dy, posX, posY, ofstX, ofstY;
    bool onGr;
    Sprite s;
 
    pl (Texture &tx)
    {
        s.setTexture(tx);
        s.setTextureRect(IntRect(20, 0, 20, 23));
        chrOfst = -10;
        posX = 64;
        posY = 64;
        ofstX = posX - 100;
        dir = 1;
    }
    void colis (bool isHor)
    {
        for (int y = posY / 16; y <= (posY + 16) / 16; y += 16)
        {
            for (int x = (posX - 8) / 16; x <= (posX + 8) / 16; x += 16)
            {
                short int isTil = wrld[x][y];
                if (isTil == 1)
                {
                    if (isHor)
                    {
                        posX = x * 16 - 16 * dir;
                    }
                    else
                    {
                        if (dy > 0)
                        {
                            posY = y * 16 - 16;
                            dy = 0;
                            onGr = true;
                        }
                        if (dy < 0)
                        {
                            posY = y * 16 + 16;
                            dy = 0;
                        }
                    }
                }
            }
        }
    }
    void update (float tim)
    {
        if (Keyboard::isKeyPressed(Keyboard::D))
        {
            if (dir == -1)
            {
                chrOfst = -10;
                dir = 1;
            }
            dx += 0.06;
        }
        if (Keyboard::isKeyPressed(Keyboard::A))
        {
            if (dir == 1)
            {
                chrOfst = 10;
                dir = -1;
            }
            dx -= 0.06;
        }
        if (onGr)
        {
            if (Keyboard::isKeyPressed(Keyboard::W))
            {
                dy -= 0.25;
                onGr = false;
            }
        }
        else
        {
            dy += 0.0002;
        }
        if (dx != 0)
        {
            posX += dx * tim;
            colis (true);
            ofstX = posX - 100;
            dx = 0;
        }
        posY += dy * tim;
        onGr = false;
        colis (false);
        ofstY = posY - 100;
        s.setScale(dir, 1);
        s.setPosition(posX - ofstX + chrOfst, posY - ofstY - 7);
    }
};
 
int main()
{
    RenderWindow window(VideoMode(200, 200), "test!");
    ifstream fin;
    fin.open("./data/map.txt");
    if (fin.is_open())
    {
        for (int y = 0; y < 10; y++)
        {
            for (int x = 0; x < 20; x++)
            {
                wrld[x][y] = fin.get() - '0';
            }
        }
    }
    else
    {
        window.close();
    }
    fin.close();
    Texture mt;
    mt.loadFromFile("./data/tiles.png");
    Sprite ms;
    ms.setTexture(mt);
    Texture t;
    t.loadFromFile("./data/pl.png");
    pl p (t);
    float ft;
    Clock c;
    while (window.isOpen())
    {
        ft = c.getElapsedTime().asMicroseconds();
        c.restart();
        ft /= 1000;
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
        }
        p.update(ft);
        window.clear(Color::Blue);
        for (int y = 0; y < 10; y++)
        {
            for (int x = 0; x < 20; x++)
            {
                if (wrld[x][y] == 1)
                {
                    ms.setTextureRect(IntRect(0, 0, 16, 16));
                    ms.setPosition(x * 16 - p.ofstX, y * 16 - p.ofstY);
                    window.draw(ms);
                }
            }
        }
        window.draw(p.s);
        window.display();
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2023, 19:53
Ответы с готовыми решениями:

Пытаюсь сделать словарное дерево
С С++ знаком очень плохо в основном работал на С, так что что то здесь может показаться странным,...

Пытаюсь сделать змейку в консоли :)
Всем привет, тут набросал небольшой код, хочу сделать змейку, но столкнулся с такой проблемой: Ведь...

Пытаюсь сделать парсинг курса валют
Пытаюсь сделать парсинг курса валют с сайта kurs.com.ua. А именно нужно с вкладки межбанк брать...

Хочу сделать 2d игру(не платформер)
Собственно пытался найти туторы по созданию 2d игры (не платформера), например, появляется объект,...

Сделать платформер с помощью SFML
Всех доброго времени суток. Вот взялся сделать платформер с помошью SFML. Написал код, чтобы...

1
0 / 0 / 0
Регистрация: 29.03.2023
Сообщений: 2
09.04.2023, 18:21  [ТС] 2
Проблему исправил. Стоило просто немного пораскинуть мозгами.
0
09.04.2023, 18:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2023, 18:21
Помогаю со студенческими работами здесь

Сделать платформер типа марио
Помогите сделать платформер типа марио, в котором есть персонаж, враги, они могут стрелять друг...

Как сделать на Delphi простейший платформер
Доброго времени суток! Давно программирую на Delphi, однако ни разу не писал игры. Хочу попробовать...

Как сделать более плавный прыжок в игре-платформер?
Делаю платформер. Использую для этого примитивы где Rectangle, это блоки по которым перемещается...

Не могу сделать вывод данных из таблицы БД (Пытаюсь сделать гостевую книгу)
Много статей всяких перечитал, и везде по-разному описывается моя проблема... Запись в БД есть, все...

В БД Access пытаюсь сделать так, чтобы по кол-ву продаж сделать премирование сотрудников, но не могу понять
Пытаюсь сделать в БД Access, чтобы по кол-ву продаж сделать премирование сотрудников, но не могу...

Пытаюсь сделать калькулятор
Сразу говорю, что я полный дуб. Объясните на пальцах, пожалуйста, что сделать. чтобы вся эта...


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

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