我希望这个论坛可以接受这个问题,因为它更像是一个数学问题而不是编程问题。
我正在使用 cocos2d 框架开发一个基本的太空射击游戏,其中用户控制宇宙飞船并射击小行星/敌人,而敌人也向宇宙飞船射击(原来的嗯?)。
敌人发射的“激光”是管状的,通常只能在 x 轴上从右到左移动。这很容易实现,运动是用这行代码创建的:
currentEnemyProjectile.position = ccp(currentEnemyProjectile.position.x - ((screenSize.width/kLaserSpeed)* dtSixty), currentEnemyProjectile.position.y);
我还有一个特定的敌人,它位于屏幕中间并旋转以向宇宙飞船发射它的弹丸,所以如果宇宙飞船与敌人处于不同的 y 位置,那么弹丸精灵将旋转然后移动到飞船的位置,所以它也需要通过 y 轴。
我目前正在使用代码来实现这一点:
float xDiff = ((screenSize.width/kLaserSpeed)* dtSixty);
float yDiff = (xDiff / 57) * currentEnemyProjectile.rotation;
currentEnemyProjectile.position = ccp(currentEnemyProjectile.position.x - xDiff, currentEnemyProjectile.position.y + yDiff);
我只是将其作为临时解决方案解决,我知道这不是最佳的做事方式。它有点工作,但是当我计算出沿 x 轴运动的 y 偏移量时,如果射弹沿 y 轴移动得更远,它们将移动得更快。理想情况下,如果它们进一步向上或向下移动,它们应该沿着 x 轴移动得更慢,这样任何轨迹的移动速率都是恒定的。(我希望我已经解释得足够好)
我上次上数学课已经大约 10 年了,所以我的几何/三角函数相当模糊/不存在,任何人都可以阐明如何做到这一点吗?
另外,值得注意的是,我想在不使用 cocos2d 操作的情况下执行此操作。我宁愿每帧都移动我的精灵,因为我在作为游戏的一部分操纵时间流时一直在做,所以我需要比 cocos2d 动作所能提供的更多的控制。
提前感谢您的帮助。