- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在使用边界框使 sprite 显示为实体时遇到问题。碰撞与下面的代码一起工作得很好。
位置是主要角色在 map 上的位置。character2 是主角将与之发生碰撞的 18 x 28 Sprite 的名称。
当主要角色与 character2 Sprite 碰撞时,我尝试相应地调整位置(例如:Position.X -=1;)但这只会让我的主要角色向后滑动,直到它不相交。
我觉得这很简单,但对于我来说,我就是想不通。
总结一下我的问题:如何让 character2 Sprite 在碰撞时显示为实体?
此外,即使我的主要 Sprite 在碰撞时停止(通过将速度降低到 0),它也会卡在那里,if 语句进入无限循环。
float x1 = Position.X;
float y1 = Position.Y;
float x2 = x1 + character2.Width;
float y2 = y1 + character2.Height;
BoundingBox b1 = new BoundingBox(new Vector3(x1, y1, 0),
new Vector3(x2, y2, 0));
BoundingBox b2 = new BoundingBox(new Vector3(Position2.X, Position2.Y, 0),
new Vector3(x2, y2, 0));
if (Collision(b1, b2))
{
// ????
}
最佳答案
这完全取决于你想要发生什么,但一个建议是这样的......
if (HorizontalCollision(b1, b2))
{
xv = -xv;
}
else if (VerticalCollision(b1, b2))
{
yv = -yv;
}
Position2.X += xv;
Position2.Y += yv;
xv
和 yv
在这种情况下将是速度变量,当分别发生水平或垂直碰撞时,您只需简单地反转它们的方向。这将导致对象或角色真正地相互弹开。
然后您可以添加 xv *= .99
和 yv *= .99
以便在每次渲染循环后速度减慢,模拟动量和摩擦。当您使用这样的速度变量时,会出现许多不同的可能性。顺便说一句,这叫做Euler integration并且对于动画目的来说非常高效。
关于c# - 二维边界框碰撞、墙壁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584466/
我目前在使用边界框使 sprite 显示为实体时遇到问题。碰撞与下面的代码一起工作得很好。 位置是主要角色在 map 上的位置。character2 是主角将与之发生碰撞的 18 x 28 Sprit
这个问题在这里已经有了答案: JavaScript: Collision detection (10 个回答) 10 个月前关闭。 检测 2 个物体(墙壁)碰撞的好方法。是的,不仅仅是检测,还有进一步
我正在制作一个 roguelike 游戏,但在编码方面我是初学者。我已经让我的角色移动了,我的墙壁和地板 Sprite ,但我的代码中有一些错误,允许角色穿过墙壁。 我用了 block_path在地板
我使用的代码只是取自一个示例,它确实为我的场景建了一堵墙: /** This loop builds a wall out of individual bricks. */ public vo
我已经尝试解决平滑播放器-墙壁-碰撞的问题,使播放器沿着墙壁滑动。 我试过以下: playerBox->move(); if (playerBox->intersects(wall)) { c
我是一名优秀的程序员,十分优秀!