按压时“口吃”运动

时间:2013-05-27 18:18:22

标签: c++ sfml

第一次学习SFML并用C ++制作游戏。我的问题来自于角色的移动。我正在制作类似Astroids的克隆,当按下按键时,动作不是很平滑。角色在周围停顿,并在同时按下旋转和向前移动时停止。有什么帮助吗?

Player.cpp

#include "Player.h"
#include "Bullet.h"
#include <iostream>
#include <valarray>

#define SPEED 10
#define ROTATION 15


Player::Player()
{
    this->_x = 150;
    this->_y = 150;
    this->_xspeed = 0;
    this->_yspeed = 0;
    this->_rotation = ROTATION;
    this->_user = this->loadSprite("/Users/ganderzz/Desktop/Programming/C_Plus/stest/stest/Resources/Player.png");
    this->_user.setOrigin(16, 16);
}

void Player::Collision(RenderWindow & in)
{
    if(this->_x >= (in.getSize().x-32) || this->_x <= 0)
        this->_xspeed = 0;
}

void Player::Move(Event & e)
{
        if(Keyboard::isKeyPressed(Keyboard::D))
        {
            this->_user.rotate(this->_rotation);
        }
        if(Keyboard::isKeyPressed(Keyboard::A))
        {
            this->_user.rotate(-this->_rotation);
        }
        if(Keyboard::isKeyPressed(Keyboard::W))
        {
            this->_yspeed = -sinf((90 + this->_user.getRotation()) * 3.14 / 180) * SPEED;
            this->_xspeed = -cosf((90 + this->_user.getRotation()) * 3.14 / 180) * SPEED;

            this->_x += this->_xspeed;
            this->_y += this->_yspeed;
        }
        if(Keyboard::isKeyPressed(Keyboard::Space))
        {
            Bullet b(this->_x,this->_y,this->_user.getRotation());
        }
}

void Player::Draw(RenderWindow & in)
{
    this->_user.setPosition(this->_x, this->_y);
    in.draw(this->_user);
}

Sprite Player::loadSprite(std::string filename)
{
    this->_texture.loadFromFile(filename, IntRect(0,0,32,32));

    return Sprite(this->_texture);
}

1 个答案:

答案 0 :(得分:1)

我认为这是由于时间管理,如果它是一个小2D你可能有很高的FPS率。

然后你的move事件被多次呼叫并造成这种口吃。

您应该限制帧速率,如果限制帧速率不够,请尝试为事件添加时钟。

您可以在this page of the doc

中找到所需内容

如果不是这样,向我们展示你的主循环,也许你在那里需要大量的资源。

希望它有所帮助。