好的,所以我有这个平台游戏,有块和熔岩,还有一个角色。请记住,我是一个13岁的人,并且对C#没有超级经验(我已经使用C#和.NET大约8个月了)。这是我检测块的代码:
bool onGround = false
const int G = 5;
foreach (Block block in blocks)
{
while (!(characterRectangle.Intersects(block.Rectangle)))
{
location.Y += G;
break;
}
onGround = characterRectangle.Intersects(block.Rectangle);
}
问题?角色下降太快了。块越多,它就越快。现在,我知道这是因为foreach循环,但是解决方法是什么。
答案 0 :(得分:1)
在碰撞检测阶段,大多数游戏不会像重力那样移动玩家。而是在碰撞检测循环之前将玩家向下移动。然后,如果在你的碰撞检测过程中,你发现他正在与某物发生碰撞,请将他向后移动,直到他不再碰撞为止。
答案 1 :(得分:0)
这段代码何时被调用?
我注意到的第一件事:
"而#34;循环或多或少是无用的,因为你总是调用break;
。这将退出while循环。你也可以使用" if"子句。
此外,"位置"?这是你的球员位置吗?如果是,那么对于blocks
中的每个块,它的Y值将增加G.因此,blocks
集合中的块越多,您的播放器就会越快。