我正在为一个游戏迷做像游戏这样的导弹指挥。
炸弹从屏幕顶部Y = 0落下,并在Y = 63处击中“地面”。炸弹以一定角度进入,因此我可以通过一点点触发来计算它:
BombX = initialBombX-bombDistanceTraveled * cos(bombTheta)
BombY = 0-bombDistanceTraveled * sin(bombTheta)
这很好用,但是我想将Theta随机化。但是,我希望炸弹始终在离开屏幕(x <0或x> 128)之前先击中“地面”(y = 63)。
请参阅此图以查看外观(白线=良好,红线=不良)
有人可以帮我提出一个方程来用约束条件限制theta的情况吗?
初始X介于0和128之间
初始Y始终为0
如果Y <= 63,则X> 0 && X <128
谢谢!
答案 0 :(得分:2)
简单三角学
tan(theta) = x/y
因此theta必须介于
-arctan(x/63)
和
arctan((128-x)/63)
对于介于0和128之间的任意选择的x,假设直线向下为theta = 0
答案 1 :(得分:0)
也许您可以简化一些事情。正弦和余弦计算可能看起来很慢,因此我们可以首先随机化x起始坐标以及x逼近坐标。然后:
xDelta = approachX - initialX;
bombX = initialX + ((( bombY + 1 ) * xDelta ) >> 6);