国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Easy Check Fps hit

2019-11-14 11:53:34
字體:
來源:轉載
供稿:網友

通過簡單的直線相交,判定玩家是否射擊打中了敵人,在類似的射擊游戲的碰撞檢測中沒有必要用到物理引擎,就可以通過這種方式判斷是否擊中的隊友。

以下代碼來源 smart fox server Fps Demo

// Checking if the player hits enemy using simple line intersection and // the known players position and rotation angles PRivate boolean checkHit(CombatPlayer player, CombatPlayer enemy) { if (enemy.isDead()) { return false; } // First of all checking the line intersection with enemy in top projection double radius = enemy.getCollider().getRadius(); double height = enemy.getCollider().getHeight(); double myAngle = player.getTransform().getRoty(); double vertAngle = player.getTransform().getRotx(); // Calculating an angle relatively to X axis anti-clockwise double normalAngle = normAngle(360 + 90 - myAngle); //Calculating the angle of the line between player and enemy center point double difx = enemy.getX() - player.getX(); double difz = enemy.getZ() - player.getZ(); double ang = 0; if (difx == 0) { ang = 90; } else { ang = Math.toDegrees(Math.atan(Math.abs(difz / difx))); } // Modifying angle depending on the quarter if (difx <= 0) { if (difz <= 0) { ang += 180; } else { ang = 180 - ang; } } else { if (difz <= 0) { ang = 360 - ang; } } ang = normAngle(ang); // Calculating min angle to hit double angDif = Math.abs(ang - normalAngle); double d = Math.sqrt(difx * difx + difz * difz); double maxDif = Math.toDegrees(Math.atan(radius / d)); if (angDif > maxDif) { return false; } // Now calculating the shot in the side projection // Correction value to fit the model visually (as the collider may not totally fit the model height on client) final double heightCorrection = 0.3; if (vertAngle > 90) { vertAngle = 360 - vertAngle; } else { vertAngle = -vertAngle; } double h = d * Math.tan(Math.toRadians(vertAngle)); double dif = enemy.getTransform().getY() - player.getTransform().getY() - h + heightCorrection; if (dif < 0 || dif > height) { return false; } return true; } private double normAngle(double a) { if (a >= 360) { return a - 360; } return a; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铜山县| 申扎县| 南投市| 越西县| 辽宁省| 屏边| 南漳县| 三台县| 鸡西市| 兴文县| 安乡县| 广安市| 建湖县| 凉城县| 韩城市| 怀宁县| 府谷县| 清水河县| 清丰县| 舟山市| 洪雅县| 印江| 宁德市| 德安县| 徐汇区| 新乐市| 温州市| 马山县| 梁平县| 扶绥县| 纳雍县| 九龙县| 色达县| 黄冈市| 锡林郭勒盟| 开平市| 陇南市| 麦盖提县| 崇义县| 辽源市| 嘉善县|