如何实现向量(向量数学)?
目前我正在制作一个突破游戏,并定义我正在使用的对象的位置或运动:
float mX, mY;
float speedX, speedY;
为了移动对象,我将某个方向的速度添加到当前位置(mX += speedX)。
但我已经读了很多关于我“应该”使用向量而不是上面的内容,我现在计划这样做。我已经阅读了一些矢量数学知识,但我不知道如何在我的游戏中实现它。关于数学本身有很多信息,但我在代码方面找不到任何内容。我可以想出:
float mX, mY;
float direction;
float velocity;
但我有点卡住了。我知道我应该以速度
将对象移动到方向
,可能需要时间因素,但是如何呢?
(顺便说一句,我在 Android 上使用 openGL-ES 制作它)
Currently i'm making a breakout game, and to define objects' location or movement i'm using :
float mX, mY;
float speedX, speedY;
And to move an object I add the speed in a certain direction to the current position (mX += speedX).
But I've read alot on that I 'should' be using vectors instead of the above, wich I now plan on doing. I've read up on some of this vector math, but I don't know how I could implement this in my game. There's alot of information on the math itself, but I couldn't find anything on the code-side of it. I could come up with:
float mX, mY;
float direction;
float velocity;
But here i'm kinda stuck. I know I should move the object to direction
with velocity
, probably with a factor of time, but how ?
(btw, i''m making it with openGL-ES on Android)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
二维向量有两个维度:
(vx, vy)
。这就是你所需要的。您可以通过计算所谓的“单位向量”来找到方向:一个大小为 1 的向量,指向您要去的方向。
您可以使用以下公式计算幅度:
magnitude = sqrt(vx*vx + vy*vy)
将两个分量除以幅度即可得到单位向量:
如果您在一段时间内以恒定速度移动步骤 dt,那么您在每个方向上移动的距离为:
假设在该时间段内没有加速度。
这都是基本的矢量内容。读一点书就能大有帮助。
A vector in 2D has two dimensions:
(vx, vy)
. That's all you need.You find the direction by calculating what's called 'unit vector': a vector of magnitude 1 that points in the direction you're going.
You calculate magnitude using this formula:
magnitude = sqrt(vx*vx + vy*vy)
You get the unit vector by dividing both components by the magnitude:
If you are moving with a constant velocity over a time step dt, then the distance you move in each direction is:
This assumes no acceleration over that time period.
This is all basic vector stuff. A little reading could go a long way.