ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 获取Vector2之间的角度

2019-05-17 13:57:39  阅读:947  来源: 互联网

标签:c xna windows-phone-8 monogame


当汽车撞到星星时,我想将星星(我的代码中的硬币)移动到屏幕的正确右上角.在每次更新期间,恒星和道路都以恒定速度向下移动.由于道路向下移动,汽车不会移动但似乎向上移动.虽然它可以根据用户的命令移动到左右车道.

所以我使用以下方法计算了屏幕的星形和右上角之间的角度

public double AngleBetween(Vector2 a, Vector2 b)
{
    return Math.Atan2(b.Y - a.Y, b.X - a.X);
}

在我的Update方法中,以下计算要移动的速度并将其发送到屏幕的右上角

double angleBetween = coin.AngleBetween(coin.Position, new
   Vector2(currentGame.GraphicsDevice.Viewport.Bounds.Right, 0));              
collidedCoinVelocity = new Vector2((float)Math.Sin(angleBetween), 
   -(float)Math.Cos(angleBetween));

在我的Draw方法中,我更新了coin.Position使用

coin.Position += collidedCoinVelocity * 10 ;

问题是星(硬币)没有像我想要的那样发送到右上角,但是它位于右侧屏幕中间的某个位置.

当星球在右侧车道上被击中时,它与右上角之间的角度始终是

1.2196048576751 radians = 69.878211 degree

当恒星在左侧车道上时,角度为

0.952588487628243 radians = 54.5793 degree

我正确地计算了角度,我错过了什么?也许我忘了考虑明星的向下运动?

编辑

我已更新图像以显示我正在尝试计算的角度并编辑我的问题以使其更清晰.

编辑2

添加了第二张图片,以显示被击中后星星的去向.

解决方法:

呃…仅供参考;从笛卡尔坐标转换为使用角度,然后回到笛卡尔坐标在这里没有任何意义.

只需得出你的最终速度:

Vector2 direction = new Vector2(currentGame.GraphicsDevice.Viewport.Bounds.Right, 0) - coin.Position;
direction.Normalize();

Velocity = direction * 10;
Position += Velocity;

也;永远不要更新Draw中的位置.绘图用于绘图,而不是更新.更新保持更新!

也是2;您应该概括您的代码.所有移动对象都应该继承相同的基础,包括Velocity,Position和Acceleration以及处理这些内容的代码.这样,你只需改变你的逻辑来操纵速度和/或加速度来移动东西.

MovingObject.Update:

Velocity += Acceleration * deltaTime;
Positioin += Velocity * deltaTime;

(deltaTime =自上一帧以来的秒数,或者(float)gameTime.ElapsedGameTime.TotalSeconds)

然后你只需在子类更新结束时使用base.Update(),只要你设置了正确的值,位置和速度就会起作用.

标签:c,xna,windows-phone-8,monogame
来源: https://codeday.me/bug/20190517/1121483.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有