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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Easy Check Fps hit

2019-11-14 12:50:25
字體:
供稿:網(wǎng)友

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

以下代碼來源 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; }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 炎陵县| 玉溪市| 祁东县| 中江县| 甘南县| 长乐市| 谢通门县| 集安市| 皮山县| 古田县| 盈江县| 修文县| 南充市| 开平市| 齐河县| 安远县| 宁城县| 扶风县| 正镶白旗| 锦州市| 高要市| 平利县| 敦化市| 庄河市| 廉江市| 湘阴县| 驻马店市| 金坛市| 诸城市| 长泰县| 卢氏县| 红安县| 旌德县| 奈曼旗| 思南县| 铜山县| 临颍县| 筠连县| 石阡县| 十堰市| 微山县|