- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 C#、sdl.net 开发一个简单的 2d 赛车游戏(自上而下查看)。现在,我正在尝试管理我的车的速度、加速度和刹车。我的问题是算法。我的循环 (Events_Tick)
每秒执行 50 次,其中我的汽车位置的处理方式如下:
private void Events_Tick(object sender, TickEventArgs e)
{
car.ProcessPosition();
}
和ProcessPosition
是这样的:
if (throttle)
{
speed += 1;
x += 1;
}
最后,我在新的 X 上绘制我的 Sprite 。
问题是太快了!
所以我想问你如何保持 50 FPS(每秒帧数)并且每秒仅移动我的 Sprite (汽车)N 像素(基于其速度)。
提前致谢!问候!
最佳答案
首先,因为您玩的是 2d 而不是 1d 游戏,所以您需要速度
class Vector
{
double x;
double y;
}
在这门类(class)中,您应该保持位置和速度。
由于您是 2d 自上而下的,因此您必须在速度向量上实现一些 .RotateLeft()
和 .RotateRight()
。
旋转将像这样实现:
x' = cos(a) * x - sin(a) * y
y' = sin(a) * x + cos(a) * y
并且您必须按如下方式实现您的 .Move()
方法:
void Move(Vector v)
{
x+=v.x;
y+=v.y;
}
编辑:请询问是否需要澄清或进行更深入的讨论。
此外,您可以在此处使用计时器,但尝试计算自上次计时器事件所花费的时间,然后在添加到当前位置时将速度乘以该值,这样您将获得更准确的位置。
sin()
和 cos()
中的 a 将是一个以弧度表示的角度,您可能需要此处的度数。
这里是 something让你了解度数和弧度。
关于c# - 如何在一个简单的赛车游戏中管理 "speed"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3968473/
短版: 计划: 控制赛车(汽车)圈速(不得重置) 可以用作天文台 b 能够用作反向计时器(开始于 X 分钟:秒结束于 00:00) 长版: 我需要一个程序来控制时间,我需要时间来回(由我选择) 然后我
我正在玩一些 Boost 线程,我编写了以下代码: #include #include volatile int threads = 0; const int iterations = 200;
我对 QuickSort 进行了一些改进,并决定针对 Java Arrays.sort() 对其进行测试。 结果令人着迷: 在 Java 6 上: 我的时间/系统时间 = 74/83 = 0.8915
我是一名优秀的程序员,十分优秀!