我正在努力通过mario zechner在框架badlogicgames上制作一个简单的游戏。我只是试图放置一些瓷砖说..树,灌木丛等,并希望我的播放器在通过它们时停止...以产生良好的效果..我尝试了许多替代方案......但是没有工作......
1。)我试图定义一个布尔值playerBolcked = false
; ...在碰撞检测循环中我将其设置为true ..当它为真时..我阻止了玩家移动.. update()
;
2。)我试图在检查碰撞之前存储玩家的位置..如果玩家与瓷砖碰撞... 然后我再次设定位置......它也没有用......
我的检测代码是这样的......
private void checkTreeCollisions() {
int len = trees.size();
float x = allen.position.x;
float y =allen.position.y;
for (int i = 0; i < len; i++) {
Tree tree = trees.get(i);
if (OverlapTester.overlapRectangles(allen.bounds, tree.bounds)) {
// this is not working
allen.position.set(x, y);
break;
}
}
}
请建议我这样做的好方法......
答案 0 :(得分:0)
在碰撞检测中,首先检查它是否在x轴上水平碰撞,然后将玩家在x上的速度设为零。然后垂直检查,如果玩家在y轴上发生碰撞,则将其y速度设为零。
This是一个好的开始。
答案 1 :(得分:0)
问题是,在您的代码中,您正在保存播放器的位置并同时检查碰撞。你需要做的是在保存他/她的位置之后和检查碰撞之前移动玩家:
private void checkTreeCollisions() {
int len = trees.size();
//Save your player position here
float x = allen.position.x;
float y =allen.position.y;
//Move your player move code here, so he moves, then checks collitions
for (int i = 0; i < len; i++) {
Tree tree = trees.get(i);
if (OverlapTester.overlapRectangles(allen.bounds, tree.bounds)) {
//If collision, then set the player to his/her previous position
allen.position.set(x, y);
break;
}
}
}
您可以使用相同的逻辑划分x轴和y轴的移动,并且您可以在物体两侧“滑动”,看起来好得多,然后停止。