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

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

Easy Check Fps hit

2019-11-14 11:56:25
字體:
來源:轉載
供稿:網友

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

以下代碼來源 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; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄢陵县| 阳春市| 普格县| 临湘市| 根河市| 遂川县| 嘉峪关市| 抚松县| 长汀县| 兴隆县| 池州市| 金乡县| 垣曲县| 克什克腾旗| 怀宁县| 汪清县| 溧水县| 竹北市| 昌黎县| 孟连| 城步| 郧西县| 磐石市| 灵川县| 兴和县| 平度市| 玉树县| 尚志市| 宿州市| 松滋市| 连平县| 双峰县| 垫江县| 格尔木市| 稻城县| 凤凰县| 马龙县| 香港| 南安市| 镇原县| 南通市|