Articles of 射弹物理

瞄准移动目标(或预测目标的位置在弹药需要的时间)

我有一个游戏,我知道我的目标的位置和速度。 我知道我自己的位置和我的射弹的速度。 我想确定 我的射弹与目标之间的交叉点的位置,或者 我的射弹与目标相交所需的时间 所有的实体正在以恒定的速度和方向行驶,这使得生活更轻松。 我一直在努力研究math,但是不能完全正确。 我知道目标与弹丸相交的预测位置 Pp = Tp + Tv * t 其中,Pp为预测位置,Tp为当前目标位置,Tv为目标速度,t为时间。 我也知道 t = | Pp – Sp | / Bs Sp是我的(源)位置,Fs是子弹(子弹)的速度。 但我无法想出解决这个问题的方法来获得Pp或T. 我知道所有的速度是不变的。 我可以自由地瞄准任何方向,并且我知道弹丸比目标快,因此击中得到保证 任何人都可以启发我吗? 谢谢 我发现一个网站详细说明了一种方法,但这似乎并不奏效。 我的validation方法,以确定它的工作原理是使用预测的位置来确定目标达到它的时间,并让射弹到达它。 这些应该是非常相似的,但在我的游戏中,他们几乎是2的因素。

计算弹丸运动

我在制定一个方法时会遇到一些麻烦,这个方法会不断地向同一方向准确地移动一个“子弹”。 这是我迄今为止 public Vector3f moveFromPosition(Vector3f location, float pitch, float yaw, Game game) { Vector3f loc = location; loc.z += 0 * Math.cos(Math.toRadians(yaw – 90)) – 1 * Math.cos(Math.toRadians(yaw)); loc.x -= 0 * Math.sin(Math.toRadians(yaw – 90)) – 1 * Math.sin(Math.toRadians(yaw)); loc.y += 0 * Math.sin(Math.toRadians(pitch – 90)) – 1 * Math.sin(Math.toRadians(pitch)); return loc; } 这种方法在渲染方法中被调用,所以每一帧都会移动子弹1的空间,这取决于子弹被发射的音高,偏航和位置。 俯仰和偏航值保持相同的每一帧,而vector3f“位置”代表子弹当前的位置。 […]

Javascript – 每次触发用户事件时创建一个新的子弹实例

基本上我有一个函数,我需要创建一个对象,每次用户按空间(事件监听器没有显示在这里)。 function arrow(){ this.x = playerXPos + 40; this.y = playerYPos + 40; this.init = function(){ var arrowImg = new Image(); arrowImg.src = "arrow.png"; c.drawImage(arrowImg,this.x,this.y); this.x+=10; if(this.x > 500){ keySpace = false; } } } if(keySpace){ arrowObj.init(); } 这个效果很好,但是我一次只能在屏幕上有一个箭头,这是非常有限的。 有没有什么方法可以在每次if语句为真时创建一个新对象,并将其存储在一个数组或其他东西?

刚体悬弹在半空中悬挂

我遇到了Unity的Rigibodyfunction问题。 每当我尝试射弹时,它都会在空中悬浮。 射弹存储在一个对象池中。 下面是问题的代码和图像: 图片: 码: void FixedUpdate (){ //Logic for firing bullets if (Input.GetMouseButtonDown (0) && firingBullets < 50) { //Bullets are being stored as a pool. If isKinematic of all the bullets is set to false before it is fired from the gun, all the bullets in the pool will scatter bulletProjectile [firingBullets].isKinematic […]

如何预测对象的未来位置(子弹同步)?

有一个多人游戏,服务器发送一个消息时,所有的客户端发送一个消息,包含子弹的位置,子弹的速度和时间戳。 通过有时间戳,我们可以计算滞后,假设它是100ms。 我的游戏使用Box2D。 如何通过获取这些数据来预测实际和当前的子弹位置? 我猜速度也可能会改变一点点。

Psudo 3D(2.5D?)抛射体运动

我试图用2d空间中的抛射体运动弧来模拟在屏幕上出现的球。 有没有一套方程来处理这个问题。 我可以想象这个方程需要考虑弹丸的初始垂直和水平角以及弹丸的初始速度和期望的开始和结束尺度。

在Unity 2D中向着鼠标位置发射弹丸

我目前正在创建一个处理抛射体运动的脚本,而且几乎是我想要的东西。 目前,脚本正确地实例化了投射物,将投射物移向鼠标并将其从屏幕上删除,但是投射物的速度并非恒定(取决于鼠标与玩家的接近程度,速度更快或更慢),并且在射弹,它跟随鼠标的位置,直到它飞离屏幕。 public class LetterController : MonoBehaviour { private List<GameObject> letters = new List<GameObject>(); public GameObject letterPrefab; public float letterVelocity; Vector3 direction; void Update() { direction = Input.mousePosition; direction.z = 0.0f; direction = Camera.main.ScreenToWorldPoint(direction); direction = direction – transform.position; if (Input.GetMouseButtonDown(0)) { GameObject letter = (GameObject)Instantiate(letterPrefab, transform.position,Quaternion.identity); letters.Add(letter); } for (int i = 0; i […]

SDL子弹运动

我目前正在研究我的第一个太空射手,我正在让我的船发射一些子弹/激光。 不幸的是,我很难让子弹垂直飞行。 我是一个总的noob当谈到这一点,所以你可能很难理解我的代码:/ // Position Bullet Function projectilex = x + 17; projectiley = y + -20; if(keystates[SDLK_SPACE]) { alive = true; } 这是我的演示function if(alive) { if(frame == 2) { frame = 0; } apply_surface(projectilex,projectiley,ShootStuff,screen,&lazers[frame]); frame++; projectiley + 1; } 我试图让子弹垂直飞行…我不知道该怎么做。 我试图搞乱y坐标,但事情变得更糟。 激光/子弹只是跟船:( 我该如何让它在起始位置开火,然后继续沿着垂直的方向行驶而没有沿着船走? int main( int argc, char* args[] ) { Player p; Timer […]

旋转箭头而不使用Unity3d物理引擎

我有这样的代码,可以在不使用统一物理引擎的情况下模拟抛射物的运动 IEnumerator LaunchProjectile(int angle, float speed) { // Move projectile to the position of throwing object + add some offset if needed. Projectile.position = transform.position + new Vector3(0, 0f, 0); Projectile.rotation = transform.root.rotation; Debug.Log(transform.root.eulerAngles); // Calculate distance to target float target_Distance = speed * (Mathf.Sin(2 * firingAngle * Mathf.Deg2Rad) / gravity); // Extract the XY […]

如何在俯视图中创建炮弹的弹射运动?

目的 通过触点将子弹运动到特定目的地。 在下面的图像是一个子弹的例子,它有一个抛射运动。 根据我的观察,子弹的速度和角度是根据距离计算的。 http://pixwerk.net/home/images/gifs/slimeWeapon.gif 我在哪里? (如何将子弹移动到目的地?) 在下面的代码,是我用来移动项目符号到目的地的方法 。 但问题是我想创造一个子弹运动的炮弹子弹。 我如何创建这些技巧,使像下面的图像炮弹运动。 public Vector2 getVelocity(Vector2 currentPosition, Vector2 targetPosition) { Vector2 targetDirection = targetPosition.cpy().sub(currentPosition); return targetDirection .nor(); } 我做了什么? (目前我可以把子弹直接送到目的地。) 子弹正在移动(这不是问题) 。 [编辑] 绘制一个预计的轨迹 为了得到轨迹点,基于iforced的例子 。 我已经有了这个libgdx box2d版本。 b2Vec2 getTrajectoryPoint( b2Vec2& startingPosition, b2Vec2& startingVelocity, float n ) { //velocity and gravity are given per second but we […]