【发布时间】:2014-11-01 14:30:26
【问题描述】:
第一次在这里发帖。尝试寻找以前的主题以提供帮助。
我使用的是 Visual Basic,但到目前为止,我已经能够使用 C# 并只是翻译成 VB。
我想要没有瓷砖的碰撞。流畅的运动,没有任何卡顿。我已经向下移动了,我的精灵停在了屏幕的边缘。
我读过我可以使用边界和相交,我已经尝试过了。当我每次按下箭头键时应用 IF 语句,使用 Bounds 和 Intersects(如果它相交,我只是防止精灵移动),它适用于 ONE 键。我向左移动进入一个物体,然后停下。如果我将 IF 应用于所有键,它将第一次工作。假设我向左移动到一个对象中,IF 语句会检查 Intersects 是否为真并采取相应的行动。
现在我想向右移动,远离物体。我不能,因为我的精灵已经与对象发生碰撞,因为每个箭头键都被编程为如果有交叉点则不会移动。我完全明白为什么会发生这种情况。
我目前拥有的代码:(每个箭头键都有相同的代码,改成它)
If Keyboard.GetState(PlayerIndex.One).IsKeyDown(Keys.Right) And rBlockBounds.X <=
graphics.GraphicsDevice.Viewport.Width - rBlockBounds.Width = True Then
If rBlockBoundBoxBounds.Intersects(rObstructBounds) Then
rBlockBounds.X += 0
rBlockBoundBoxBounds.X = rBlockBounds.X - 1
Else
rBlockBounds.X += 1
rBlockBoundBoxBounds.X = rBlockBounds.X - 1
End If
End If
rBlockBounds是我的精灵作为矩形rBlockBoundBoxBounds是另一个 Rectangle(比 rBlockBounds 大 1 个像素),用作或多或少随 rBlockBounds 移动的 Hit Box,是进行碰撞检查的对象rObstructBounds是我将 Sprite 移动到的静止物体。
有人对我如何完成这项工作有建议吗?
【问题讨论】:
-
您应该每次都检查 Key,然后根据该方向检查碰撞。因此,可能是一个 Select Case 的 Key,然后是 4 个 subs 来处理每个单独的动作。另外我会使用投影矩形来测试碰撞 - 如果不移动精灵 - 这样移动就不会发生,除非它可以。