다음 문제를 진단하는 데 문제가 있습니다.C# : Object overshoots target
두 개의 대상, 즉 반지와 대상이 있습니다. 반지는 배를 나타내고 대상은 대상을 나타냅니다. 사용자가 창에서 아무 곳이나 클릭하면 대상이 클릭 한 위치에 놓이고 우주선은 그 위치로 이동합니다. 내가 가지고있는 문제는 더 많은 우주선이 움직여야 할 때, 더 많은 속도의 우주선이 달성되어 목표물을 초과하는 것이다. 배가 더 멀리 움직일수록 감속이 느려집니다. 나는 이것이 어디에서 일어나고 있는지 확신하지 못한다. 나는 코드 아래에 제공 한 :
는using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
namespace ArtificialDumb
{
class PhysicsObject
{
public Vector2 Position;
public Vector2 OldPosition;
public float Mass;
public Vector2 Acceleration;
public float Drag = 0.01f;
public PhysicsObject(float x, float y)
{
Position = OldPosition = new Vector2(x, y);
}
public PhysicsObject(Vector2 pos)
{
Position = OldPosition = pos;
}
public virtual void Update()
{
Vector2 velocity = Position - OldPosition;
velocity *= (1 - Drag);
OldPosition = Position;
Position += velocity;
Position += Acceleration;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
namespace ArtificialDumb
{
class Ship : PhysicsObject
{
public float MaxThrust;
public Vector2 Target;
public Ship(Vector2 pos)
: base(pos)
{
MaxThrust = 50f;
Mass = 100;
}
public override void Update()
{
Vector2 diff = Target - Position;
Vector2 Velocity = (Position - OldPosition);
// Dark Magic. Do Not Touch.
// This is the equation for projectile velocity. -ASR
// Edited for correct float value -ASR
// people keep touching! - AgH
Vector2 thrust = diff - (Velocity * Velocity.Length() * 0.75f);
thrust.Normalize();
// todo: Account for when we don't need to use maximum thrusters
thrust *= MaxThrust;
Acceleration = thrust/Mass;
base.Update();
}
}
}
동일한 프로젝트입니까? http://stackoverflow.com/questions/5291667/why-isnt-my-3d-collision-detection-working –
Position + = Acceleration에서 읽는 것을 중단했습니다. Isaac 경이 큰 소리로 기침 한 줄 알았습니다. 물리 모델을 수정하십시오. –
@Hans 다행히 당신을 위해 나는 의견을 downvote 수 없습니다. 틀림없이 구현은 좀 이상하지만 그의 물리학은 완전히 건전하다. 속도는 (pos-oldPos)로 계산되므로 위치에 직접 가속도를 추가하면 속도에 영향을줍니다. 이것의 이점은 위치가 외부 적으로 (예를 들어 충돌 후) 바뀔 때 속도가 자동으로 조정된다는 것입니다. – Hannesh