网络游戏-弹道子弹追击目标
来源:互联网 发布:淘宝魅力惠官方旗舰店 编辑:程序博客网 时间:2024/04/29 17:02
子弹追击目标
最近在开发一种带射击性质的游戏,需要子弹能跟踪目标。就是跟踪算法。
首先来回忆几个三角函数 :
sin(x) 对边/斜边 | 在1,2项限为正,3,4项限为负
cos(x) 邻边/斜边 | 在1,4项限为正,2,3项限为负
tan(x) 对边/邻边 | 在1,3项限为正,2,4项限为负
考虑到游戏里面的坐标系如下所示:
假设子弹坐标为:bullet.getX(), bullet.getY(), 子弹速度: bullet.getSpeed()
int angle = 30; //角度 double directX = (float)Math.cos(angle); double directY = (float)Math.sin(angle); // next point double nextX = bullet.getX() + bullet.getSpeed() * directX * Time(时间); double nextY = bullet.getY() + bullet.getSpeed() * directY * Time(时间);
在敌人子弹向你发射过来的时候,首先要计算子弹位置与你所在的位置所夹的角度 theta
double deltaX = player.getX() - bullet.getX(); // 注意,是以主角位置为起点 在上图中表示就是x1-x0 double deltaY = player.getY() - bullet.getY(); // y1-y0
为了防止在相除的时候分母为0,做一个判断,使分母近似为0,究竟是负的近似还是正的近似呢?这就需要比较子弹和你的Y坐标谁大谁小了。
if( deltaX == 0 ) { if (player.getY() >= bullet.getY()) // 子弹需要下移 deltaX = 0.0000001; else { // 子弹需要上移 deltaX = -0.0000001; } } // 同理,对deltaY作判断 if (deltaY == 0 ) { if( player.getX() >= bullet.getX() ) // 子弹需要右移 deltaY = 0.0000001; else { // 子弹需要左移 deltaY = -0.0000001; } }
对角度所处的项限作判断
double direct = 0; // 方向 if (deltaX > 0 && deltaY > 0) { angle = Math.atan(Math.abs(deltaY/deltaX)); // 第一象限 } else if (delatX < 0 && deltaY > 0) { angle = Math.PI - Math.atan(Math.abs(deltaY/deltaX)); // 第二象限 } else if (delatX < 0 && deltaY < 0) { angle = Math.PI + Math.atan(Math.abs(deltaY/deltaX)); // 第三象限 } else { angle = 2 * Math.PI - Math.atan(Math.abs(deltaY/deltaX)); // 第四象限 } double angle = Math.toDegrees(direct); //转化为角度
知道方向后,试用开始的计算公式就能知道子弹下一个坐标。
参考: — [ 子非あ鱼]
阅读全文
0 0
- 网络游戏-弹道子弹追击目标
- Unity3D中的弹道和移动目标提前量计算
- Unity3D中的弹道和移动目标提前量计算
- 汇总:unity中弹道计算和击中移动目标计算方法
- 汇总:unity中弹道计算和击中移动目标计算方法
- 子弹
- [unity教程]游戏的物理和数学:Unity中的弹道和移动目标提前量计算
- 游戏的物理和数学:Unity中的弹道和移动目标提前量计算
- 游戏的物理和数学:Unity中的弹道和移动目标提前量计算
- 多核的网络游戏服务器开发 之 设计目标
- 网络游戏
- 网络游戏
- 网络游戏
- 使用 Bullet,BulletManager 在 XNA 中创建子弹攻击目标(十五)
- 第二十二招: 追击 ST
- 追击理论判断有环链表
- NYOJ 618 追击
- 弹道模块化编写
- JZOJ 5177. 【NOIP2017提高组模拟6.28】TRAVEL
- C/C++基本数据类型所占字节数
- 做题队列
- Linux 多线程编程实例
- 使用xlwings读取excel中所有的值,写入mysql
- 网络游戏-弹道子弹追击目标
- 关于c++ template多态——CRTP 模式
- Python的list使用
- BigDecimal转String
- 推挽输出与开漏输出
- php defined使用
- hexo之next主题个性化配置详细教程
- 学习之路
- 应用层勾子IAT HOOK(源码)