You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SFML项目中速度随屏幕分辨率缩放,使炮弹同时间清屏?

窗口缩放时保持炮弹移屏时间一致的SFML实现

我有一个可调整大小的窗口,还有一门能发射炮弹的大炮,炮弹速度由帧率和流逝时间决定,基于SFML的实现代码如下:

if (Keyboard::isKeyPressed(Keyboard::Space) && !shoot) {
    shoot = true;
}

// 计算炮弹弧度
bombRadians = ((2.f * PI / 360.f) * bomb.getRotation());
x = bombSpeed * sin(bombRadians);
y = bombSpeed * -cos(bombRadians);

if (shoot) {
    bomb.move(x, y);
}

// 计时器
frames++;
if (frames == 6) {
    timer += 0.1f * (60 / framerate);
    frames = 0;
}
cout << timer << '\n';
// 更新速度
playerSpeed = (timer / 90.f + 1.f) * (60.f / framerate);
bombSpeed = ((timer / 25.f + 2.f) / 2.f + 6.f) * (60.f / framerate);

我希望在调整窗口大小时,速度能随分辨率缩放,保证不管分辨率是多少,炮弹都能在相同时间内移出屏幕。以下是简化后的计算代码:

// 简化后的计算逻辑
timer += 6.f / framerate;
bombSpeed = ((6.f * timer) + 2100.f) / (5.f * framerate);
planeSpeed = ((6.f * timer) + 300.f) / (5.f * framerate);

内容的提问来源于stack exchange,提问作者Christian B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:52:43