c++ - Texture.loadFromFile 降低了我的 fps。应该是 60 而不是 30fps
问题描述
当我开始游戏时 fps 约为 60,但按住按钮“W”时,我的 fps 降至 30。释放该按钮后,它再次变为 60。发生这种情况是因为代码行:model->Load("img/characters.png",推荐)。
如果我要评论这样的“//”行,角色将以 60fps 平稳移动,但不会转到顶部。
Entity *player;
void heroMovement()
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
sf::IntRect top(32, 224, 32, 32);
this->player->Load("img/characters.png", top);
calculateTileAnimation(0, 32, 64, top , this->player);
velocity.y -= character_speed;
}
}
void calculateTileAnimation(int firstTile , int sizeTile , int
lastTile,sf::IntRect rec , Entity *model)
{
model->Load("img/characters.png", rec); // This line decreasing fps
if (clock.getElapsedTime().asSeconds() < 0.3f)
{
rec.left += sizeTile;
if (rec.left == lastTile)
rec.left = firstTile;
clock.restart();
}
}
void Load(std::string filename, sf::IntRect rec)
{
this->texture->loadFromFile(filename, rec);
this->setTexture(*this->texture);
}
需要修复它,按住按钮“w”字符应打开并以 60fps 移动。
解决方案
您在每次击键时从磁盘加载纹理。不。在游戏开始时从磁盘加载纹理(您可能知道那些加载屏幕)并将它们存储在变量中。
然后使用它们,例如在setTexture
方法中。
推荐阅读
- c# - FileUpload.HasFile 总是假的,没有更新面板,一直工作到今天
- r - 绘制 edcf 时如何在 R 中设置颜色参数?
- r - 如何像普通数据框一样操作/使用反应式表达式以进行进一步计算?
- ios - 为什么执行 insertRows 后 tableview numberOfRowsInSection 不更新?
- mysql - 如何加快mysql查询执行速度?
- sqlite - Firedac Sqlite 查询在查询编辑器中运行,但从代码调用时不运行
- python - 将手写图像传递到 Keras 模型时,准确率异常低
- reactjs - 在作为道具传递给组件的文本字符串中添加一些粗体文本
- .net - 如何在不使用 Sdk 样式项目的 .NET 项目上运行 Coverlet?
- regex - 如何从字符串数组中找到模式