Форум программистов, компьютерный форум, киберфорум
Наши страницы
SFML
Войти
Регистрация
Восстановить пароль
 
Koleco
0 / 0 / 0
Регистрация: 08.04.2016
Сообщений: 11
1

Убрать притормаживание при нажатии на кнопку в игра Pong (SFML)

23.04.2016, 17:01. Просмотров 390. Ответов 2
Метки нет (Все метки)

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
#include < SFML/Graphics.hpp >
#include <cmath>
#include <ctime>
#include <cstdlib>
using namespace sf;
int main()
{
//Сглаживание текстур
ContextSettings settings;
settings.antialiasingLevel = 4;
 
//Создание окна (640,460)
sf::RenderWindow window(sf::VideoMode(640,460), "kursova9",Style::Default,settings);
 
//Рисуем ракетку 
sf::RectangleShape RectangleShape(const Vector2f(5,85));
RectangleShape.setFillColor(Color::Black);
RectangleShape.setPosition(5,189);
 
window.setVerticalSyncEnabled(true); // вертикальная синхрон..Для частоты кадров 
 
//Рисуем мяч
CircleShape ball(4);
ball.setFillColor(Color::White);
ball.setPosition(5,195);
 
int score;
int player;
int y;
const float ballSpeed = 400.f;
float ballAngle = 0.f;
 
while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        Vector2f position = RectangleShape.getPosition();
        if (event.type == sf::Event::Closed)
        {
            window.close();
        }
        if (Keyboard::isKeyPressed(Keyboard::Up) && position.y  >0)
        {
            RectangleShape.move(0, -6);
        }
        if (Keyboard::isKeyPressed(Keyboard::Down) && position.y <378)
        {
            RectangleShape.move(0, 6);
        }
        Clock clock;
        float deltaTime = clock.restart().asSeconds();
        float factor = ballSpeed * deltaTime;
        ball.move(std::cos(ballAngle) * factor, std::sin(ballAngle) * factor);
    }
 
    window.clear(sf::Color(150,150,150));
    window.draw(RectangleShape);
    window.draw(ball);
    window.display();
}
 
return 0;
}
когда ракетка начинает двигаться ,после нажатия на кнопку она немного тормозит а потом двигается .Как убрать этот дифект?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2016, 17:01
Ответы с готовыми решениями:

Анимация при нажатии одной и той же клавиши в sfml
Снова здравствуйте. Есть изображение 32x16 пикселей. На экран выводится...

Игра SFML
Здравствуйте, я хочу написать небольшую игру на с++. Условия просты каждые 3...

Игра с использованием sfml
(Игра, использую sfml) В main выполняется функция очистки экрана, а также...

Игра на SFML. Как реализовать движение по диагонали?
Всем привет. Пишу мелкую игрушку с видом сверху исключительно для...

Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново?
Как сделать так, чтобы при нажатии на кнопку &quot;Новая игра&quot; игра начиналась...

2
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 1
23.04.2016, 21:51 2
Зачем Вы запихнули код движения в цикл обработки событий окна?
0
Koleco
0 / 0 / 0
Регистрация: 08.04.2016
Сообщений: 11
24.04.2016, 23:15  [ТС] 3
Ошибку понял,вот исправленный вариант .
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
#include < SFML/Graphics.hpp >
#include <cmath>
#include <ctime>
#include <cstdlib>
using namespace sf;
int main()
{
    //Сглаживание текстур 
    ContextSettings settings;
    settings.antialiasingLevel = 4;
 
    //Создаем окно (640,460)
    sf::RenderWindow window(sf::VideoMode(640, 460), "kursova9", Style::Default, settings);
 
    //Рисуем ракетку 
    sf::RectangleShape RectangleShape(const Vector2f(5, 85));
    RectangleShape.setFillColor(Color::Black);
    RectangleShape.setPosition(5, 189);
 
    window.setVerticalSyncEnabled(true); //Вертикальная синхронизация,ннужна для частоты кадров
 
    //Рисуем мяч
    CircleShape ball(4);
    ball.setFillColor(Color::White);
    ball.setPosition(5, 195);
 
    int score;
    int player;
    int y;
    float time;
    const float ballSpeed = 400.f;
    float ballAngle = 0.f;
 
    while (window.isOpen())
    {
        Clock clock;
 
        time = float(clock.getElapsedTime().asMicroseconds() / 1000.f), clock.restart();
 
        Vector2f position = RectangleShape.getPosition();
        if (Keyboard::isKeyPressed(Keyboard::Up) && position.y  >0)
        {
            RectangleShape.move(0, -4);
        }
        if (Keyboard::isKeyPressed(Keyboard::Down) && position.y <378)
        {
            RectangleShape.move(0, 4);
        }
 
 
 
        sf::Event event;
        while (window.pollEvent(event))
        {
 
            if (event.type == sf::Event::Closed)
            {
                window.close();
            }
 
        }
 
        window.clear(sf::Color(220, 220, 220));
        window.draw(RectangleShape);
        window.draw(ball);
        window.display();
    }
 
    return 0;
}
Теперь другая проблема.Как заставить шарик двигаться по определенному закону?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2016, 23:15

Убрать readonly при нажатии на кнопку
Здравствуйте! Имеется форма &lt;form action='#' method=post&gt; &lt;input...

Можно ли убрать/удалить кнопку при нажатии ?
Привет , нужно как то убрать/удалить кнопку при ее нажатии (идея такова что...

Убрать стандартный звук при нажатии на кнопку
Здравствуйте уважаемые. Столкнулся с проблемой, при срабатывании события...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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