【发布时间】:2013-01-04 06:17:30
【问题描述】:
所以我正在使用 C# 在 XNA 中创建一个游戏,并且我在随机位置创建了墙壁,并且我试图阻止它们穿过它们/当它们击中它们时被传送到屏幕上的点。 (注意,左右现在有效,只是上下)
if (collision(wallRect[k], wallColours, pacmanRect, pacmanColor, 0))
//Collision works, not an issue here
{
if (pacmanRect.Bottom > wallRect[k].Top && pacmanRect.Top < wallRect[k].Bottom)
{
if (pacmanRect.Right >= wallRect[k].Left
&& pacmanRect.Right < wallRect[k].Right)
{
pacmanPos.X = wallRect[k].X - frameSize.X;
//frameSize is the size of the pacman sprite
}
else if (pacmanRect.Left <= wallRect[k].Right
&& pacmanRect.Left > wallRect[k].Left)
{
pacmanPos.X = wallRect[k].X + frameSize.X / 8;
}
}
else if (pacmanRect.Right > wallRect[k].Left && pacmanRect.Left < wallRect[k].Right)
{
if (pacmanRect.Bottom >= wallRect[k].Top)
{
pacmanPos.Y = wallRect[k].Y - frameSize.Y / 8;
}
else if (pacmanRect.Top <= wallRect[k].Bottom)
{
pacmanPos.Y = wallRect[k].Y + frameSize.Y / 8;
}
}
playSound(collisionSoundInstance);
}
这是游戏循环中 pacmanPos 更新的最后一点。那么如何才能让墙壁成为真正的墙壁,而你不能穿过它们呢?
【问题讨论】:
-
我不明白这是什么问题。你有问题吗?代码不起作用吗?如果它不起作用,您希望它做什么而不是做什么?您可以使用调试器遍历代码吗?
-
希望能帮助解决这个问题。它只是没有按照我的期望或我想要的那样做。
-
如果你想保留自己的代码,你应该解释它是如何工作的,什么是 frameSize?碰撞方法是什么?
-
那么您期望或希望它做什么?请非常具体。想让它“阻止东西穿墙”还不够具体。
-
好吧,我打算使用一种方法,如果在正方形的某个边缘检测到碰撞,则移动精灵使其与正方形对齐,即如果它在左边,它被移动到 wallrect[k].X - frameSize.X