Articles of 抛射物理

为简单的3D射弹发射速度

这是一个很容易的问题,但我不能完全弄清楚答案。 我有: 抛射物的初始位置。 重力vector。 我想打的(静止的)目标。 射弹的最大发射速度。 我想计算弹丸必须发射的初始速度来击中目标,假设它遵循弹道轨迹。

求解x / y / z轴上的速度?

在3D环境中,我有一个位移x的对象,我知道我需要在给定的时间间隔内进行遍历。 我有对象的标题和高程,我想弄清楚物体需要在x / y / z轴上移动的距离,以便在给定的方向上移动x个单位。 我如何计算这个? 有两种不同的方法来计算它(使用三角或线性代数)? 在哪种情况下哪种方式最好? 编辑:为了澄清,我将打个类似于我正在使用的3D场景的简单2D场景。 假设物体与x轴的夹角为35度。 做一个直角三角形,假设我们知道斜边(或者物体的位移)是10个单位。 现在要计算从对象的当前位置到35度角10个单位的对象新位置的x和y三角,你只需要: x = 10 * cos(35) y = 10 * sin(35) 我只需要解决同样的问题,除了三维。

如果我知道射门的力量和目标,我怎么能射箭?

我正试图以100%的成功率向目标射箭。 考虑到施加在箭头上的初始力,重力,弓箭手的位置以及目标的位置,我该如何在Unity中做到这一点? 我已阅读如何find弹丸的发射角度? ,它包含我正在使用的公式: 但是,这只有当我在距离物体最大距离时才是正确的。 (在最大距离以上意味着箭头不能达到目标。)我移动到目标越近,箭头射击变得越不准确,因为它越过目标。 这个角度越来越大,导致箭头像我所期望的那样移动了一段较短的距离,但是增加的幅度不够。 该脚本产生一个箭头(一个简单的球体),并启动它的目标。 它每秒发射一次,但是射手越靠近目标,箭头就越不准确。 弓箭手离箭头太远的情况没有处理,但这不是我现在所关心的。 using UnityEngine; using System.Collections; public class Archer : MonoBehaviour { public GameObject arrow; //Simple 3D Sphere public GameObject target; //Simple 3D Cube public float power = 25.0f; public Vector3 aim; private void Start() { StartCoroutine(ShootArrows()); } private IEnumerator ShootArrows() { while (true) { yield return […]

如何使激光path预测线如“弹弓牛仔”游戏?

那么如何在cocos2d或box2d中制作一个像“弹弓牛仔”游戏一样的激光path预测线,并select像“弹弓牛仔”游戏这样的目标。

弹丸目标加速度预测

我试图解决经典的射击运动物体的问题,但加速附加,将其从二次方式改为四次方程式,但是我的math技能并不是那么好,因为我更喜欢用代码而不是公式来讲话。 我发现这个https://wiki.beyondunreal.com/Legacy:Projectile_Aiming 。 我移植它,这几乎是我正在寻找,但错过了加速度的控制,因为它只能为重力或没有引力,甚至这只我的工作与技巧和修改它不知道我在做什么只是让我只那么远。 我使自己成为一个原型接口,尽量减less我想要从中获得的东西 public class PredictionResult { public bool IsInRange; // can we even hit the target? public Vector3[] ShotVelocity; // should be up to 4 possible values public float[] ShotImpactTime; // how long each shot takes to arrive at the predicted target public Vector3[] ShotImpactLocation; // somewhat redundant yet still useful if […]

如何以恒定的速度将敌方的射弹头部移动到玩家的位置

我怎样才能dynamic地设定弹丸X和Y的移动速度,使弹头在玩家位置时以恒定的速度移动? 我知道这与媒介有关,但我真的不知道如何去做。 我目前实现的速度是获得x和y位置的差异,所以发生的是弹药在距离敌人越近的位置越慢。 我使用下面的代码设置了弹丸的速度: projectile.moveSpeedX = Math.abs(position.x – targetPlayer.position.x); projectile.moveSpeedY = Math.abs(position.y – targetPlayer.position.y); 以下是抛射体更新(浮动三角洲)方法的内容: if(xdirection == LEFT) { position.x -= moveSpeedX * delta; } else if(xdirection == RIGHT) { position.x += moveSpeedX * delta; } if(ydirection == UP){ position.y -= moveSpeedY * delta; } else if(ydirection == DOWN) { position.y += moveSpeedY * delta; […]

计算运动物体的弹丸速度

我正在从事一种自上而下的太空射击游戏,并且在计算/理解从太空飞船发射的射弹物理方面遇到了麻烦。 这些船只有一个速度vector和一个独立于船体的旋转的炮塔。 目前炮弹是基于炮塔旋转发射的,通过制作一个归一化的vector然后将每个成分乘以一个速度。 但是,当船速超过标量时,这是行不通的。 现在,如果船的速度比抛射速度快,炮塔的瞄准方向与船速相同,那么抛射物就会从船上向后(离开)。 假设没有阻力/重力(非常深的空间),我应该如何处理抛射物?

为什么碰撞没有发现在两个球体中没有发生

我开始练习OpenGl中的球体碰撞检测包含两个球体使用大炮枪撞球体,但碰撞没有检测到它什么时候碰到,当我debugging代码碰撞声明时球体太远彼此球体一个代码 glPushMatrix(); glTranslatef(400, 50, -400); drawBomb(); glPopMatrix(); 康农枪的代码在这里由键盘处理程序控制 glPushMatrix(); glTranslatef(600, 0, -400); glRotatef(-longFire, 1, 0, 0); glRotatef(-longFireChaw, 0, 1, 0); //glTranslatef(0, 0, -25); drawFireHolder(); //printf_s("Long fire is %d", longFire); glPopMatrix(); 第二个球体代码在这里,由鼠标处理程序 glPushMatrix(); // bombX is global variable of value 600 // bombY and bombZ is global variable of value 0 glTranslatef(bombX, bombY, -400); //glRotatef(-longFire, xRotate, […]

我如何制造一个“掉落”的火箭弹,然后向敌人加速呢?

我正在做一个类似小行星的游戏。 我已经成功实现了线性子弹。 现在我想添加一些火箭式的子弹,有一定的飞行路线:先把火箭先“放”回来,然后加速向敌人方向。 当射手旋转时,我很难做这个工作。 想象我的意思: 子弹有一个lifeTime ,每增加一帧。

围绕指定的原点旋转图像

我试图把我的Turret.png(前面带有激光的小枪头)转向屏幕上的鼠标位置。 我试着用我的方法将弹丸转向其下一步的轨迹,但这会产生意想不到的结果。 不仅图像不是围绕固定点旋转的,它还会根据原始图像的边界进行裁剪。 我的目标是炮塔在枪头上的一个固定点上旋转,以便激光始终指向鼠标,枪头处于固定位置。 这里是我试图让它旋转的一个例子; 在这个例子中,在Illustrator中旋转了78度。 红点代表原点。 我现在的代码如下, 这种方法更新我的炮塔,并告诉炮塔角度旋转到: public void setTargetAndDirection(int x, int y) { setTarget(x, y); deltaX = getTargetX() – getX(); deltaY = getTargetY() – getY(); turret.setRotatedImage(turret.getActiveImg(), -getTargetAngle()); } 这是实际处理旋转的方法: public void setOriginRotate(BufferedImage imageIn, float angle) { GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice().getDefaultConfiguration(); int transparency = imageIn.getColorModel().getTransparency(); BufferedImage temp = gc.createCompatibleImage( imageIn.getWidth(), imageIn.getHeight(), transparency […]