gpt4 book ai didi

c++ - "Stuttered"按键时移动

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:24 28 4
gpt4 key购买 nike

学习 SFML 并首次使用 C++ 制作游戏。我的问题来自角色的移动。我正在制作类似 Astroids 的克隆,按下按键时的运动不是很流畅。当同时按下旋转和前进时,角色会四处走动,并停止。有帮助吗?

播放器.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);
}

最佳答案

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

然后你的 move 事件被多次调用并造成这种卡顿。

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

您可以在this page of the doc 中找到您需要的内容

如果根本不是那样,请向我们展示您的主循环,也许您在那里需要占用大量资源。

希望对您有所帮助。

关于c++ - "Stuttered"按键时移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16778563/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com