gpt4 book ai didi

c# - 碰撞时阻止运动

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:35 25 4
gpt4 key购买 nike

我正在使用 XNA 开发 2d 游戏,目前正在上物理课。我当前的任务是在一个物体与另一个物体碰撞时停止它。当 2 个对象发生碰撞时,我让我的游戏调用此函数:

public void BlockMovement(gameObject target) {
//you can call width by just typing width. same for height
owner.position.X += (owner.position.X - target.position.X);
owner.position.Y += (owner.position.Y - target.position.Y);
}

问题是,而不是停止。正在移动的物体被推回其宽度的量。有人可以告诉我怎么做吗?我在很多项目中都坚持了很长时间。

谢谢

最佳答案

您没有将目标和所有者的宽度和高度纳入计算。目标/所有者的 X、Y 在哪里?中间?左上?

如果碰撞是头对头的,那么

velocity=sqrt(x_velocity*x_velocity+y_velocity*y_velocity); //some pseudo   

public void BlockMovement(gameObject target) {
//you can call width by just typing width. same for height
owner.position.X -=owner.x_velocity*penetration_length/(owner.velocity);
owner.position.Y -=owner.y_velocity*penetration_length/(owner.velocity);
}

//so, if big part of speed is in x-direction then the position will
//change mostly on x-direction and opposite to velocity

如果您没有速度变量,您可以引入 2 次迭代的位置历史来计算实际速度方向。

关于c# - 碰撞时阻止运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12320764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com