- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在用 C++ 和 SFML 制作一个“小行星”游戏,我想知道平滑的动量减速和加速。在原版游戏中,当你朝一个方向移动时,你会积累“动量”,按住按钮时动量增加,松开时动量减少。我已经开始了我自己的版本。目前我有一个包含船的动量的 sf::Vector2f
。它可以是消极的或积极的。问题是,我无法正确实现减速(我什至还没有尝试加速)。我试过以下方法;
if (plr.momentum.x < 0) {
plr.momentum.x++;
}
if (plr.momentum.x > 0) {
plr.momentum.x--;
}
if (plr.momentum.y < 0) {
plr.momentum.y++;
}
if (plr.momentum.y > 0) {
plr.momentum.y--;
}
有了这个,在移动之后,玩家被慢慢地拖到窗口的左上角(坐标 0,0)。我假设这是因为 float 可以是,例如 0.05,满足“大于 0”的 if 语句。由此,它需要一个,使其成为一个负数。下一个 if 语句将其加一,然后不断循环。负 x
动量使您向左移动,负 y
动量使您向上移动,反之亦然。我想知道平滑减速和加速背后的方法。
如果您想知道,我使用以下代码根据玩家的动量移动玩家;
playerSprite.move(plr.momentum);
如果你不熟悉 SFML,sf::Vector2f
有一个 .x
和 .y
,它们在 >.move
sf::Sprite playerSprite
。 .move
相对于当前位置移动玩家;因此,如果玩家位于 (5,0),并且您执行 player.move(sf::Vector2f(-1,0))
,则他们的坐标将为 (4,0)。
编辑:作为 friend 的建议,我现在有以下减速代码。减速效果很好,但在减速后,它又开始向左上角移动。这是什么原因造成的?
if (plr.xSlowdown < 0.f) {
plr.xSlowdown += 0.1f;
}
if (plr.xSlowdown > 0.f) {
plr.xSlowdown -= 0.1f;
}
if (plr.ySlowdown < 0.f) {
plr.ySlowdown += 0.1f;
}
if (plr.ySlowdown > 0.f) {
plr.ySlowdown -= 0.1f;
}
plr.xMomentum = floor(plr.xSlowdown);
plr.yMomentum = floor(plr.ySlowdown);
最佳答案
如果你想让你的宇宙飞船在推进器关闭时减速,你应该增加阻力。
阻力根据速度施加力:最简单的方法是对阻力系数 K
执行 F = -K v
。因此,如果您的船的动量存储在 plr.xMomentum
和 plr.yMomentum
中,您的程序将是:
// note: "dt" is your timestep;
// if you don't have one, just choose some small value for "fraction", like 0.005
float fraction = drag_coefficient_K * dt;
plr.xMomentum -= fraction * plr.xMomentum;
plr.yMomentum -= fraction * plr.yMomentum;
加速将基于您的宇宙飞船的方向:
// note: "orientation" is the angle of your spaceship;
// the units of orientation are determined by "angle_scale",
// which should be chosen such that "angle_in_radians" is in radians...
float angle_in_radians = angle_scale * orientation;
float thrust_per_timestep = thrust_value * dt;
plr.xMomentum += thrust_per_timestep * cos(angle_in_radians);
plr.yMomentum += thrust_per_timestep * sin(angle_in_radians);
阻力和推力的结合有效地限制了您可以达到的速度(至少在没有重力辅助或其他东西的情况下......)。
关于c++ - C++/SFML 中的平稳动量减速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12904539/
我正在用 C++ 编写一个粒子模拟器。 我通过在每个时间步将它们的速度添加到它们的位置来移动粒子。 时间步的值是当前帧的百分比。所以全帧时间步长为1,半帧时间步长为0.5,四分之一帧时间步长为0.25
Linux下“减速”查看日志的方法 需求场景 今天查看日志,有个需求,需要按照指定“速率”输出日志信息到终端屏幕上,方便查看。 这个需求日常应该也经常会碰到,比如以下两种情况:
有没有办法取消 UIScrollView 的减速? 我想允许用户滚动 Canvas ,但我不希望用户抬起手指后 Canvas 继续滚动。 最佳答案 这可以通过利用 UIScrollView 委托(de
我在我的 c 应用程序中遇到大量 sqlite 减速问题,并且 不知道这是意料之中还是我没有正确使用 sqlite。 数据库使用滚动日志,如 http://dt.deviantart.com/jour
有没有办法取消 UIScrollView 的减速? 我想允许用户滚动 Canvas ,但我不希望用户抬起手指后 Canvas 继续滚动。 最佳答案 这可以通过利用 UIScrollView 委托(de
我有一个可以用手指拖动的 UIView,这是我使用 UIPanGestureRecognizer 实现的。这允许我水平拖动 View ;向左或向右。 我在从 UIPanGestureRecognize
我正在向 Redis 中插入大量文本以逐行存储频率。但是,jedis/redis 会变慢,并且在执行一定数量的操作后需要花费大量时间e 操作并且程序以错误结束:java.lang.OutOfMemor
我有一个 UIPanGestureRecognize,我用它来更改 View 的框架。当手势状态为 UIGestureRecognizerStateEnded 时,有没有办法模拟 UIScrollVi
我正在尝试在 MKMapView 上捕获平移和“滚动结束”。使用手势识别器可以轻松实现平移。然而,MKMapView 似乎没有在 iOS 6 中实现 UIScrollViewDelegate。这使得解
我正在尝试学习如何实现多处理来计算蒙特卡洛模拟。我从 this simple tutorial 复制了代码目的是计算积分。我还将它与 answer from WolframAlpha 进行了比较并计算
基本上破坏我的 node js express 服务器的代码是这样的: resultArr = []; resultArr["test"] = []; resultArr["test"][201507
我有一个服务,每秒向 S3 发送 10k PUT 请求。 S3 能够在几分钟内处理这些负载,但在那之后开始抛出 SlowDown 异常。它使我的服务速度减慢到无法接受的速度。 我已阅读 this并实现
SO上有足够多的类似问题和答案。然而很少提到前缀。 首先,不再需要前缀的随机化,参见 here This S3 request rate performance increase removes an
我正在创建以下画廊: gallery 我相信 prettyPhoto.css 在悬停时应用了边框颜色,但我似乎无法使用 Dom Inspector 找到它。 谁能帮我找到 css 来编辑鼠标悬停时的边
我有一个基于 paste.httpserver 的网络服务器作为 HTTP 和 WSGI 之间的适配器。当我使用 httperf 进行性能测量时,如果每次使用 --num-conn 启动一个新请求,我
我是一名优秀的程序员,十分优秀!