Java碰撞检测不起作用

时间:2012-12-25 22:31:14

标签: java

我过去曾就类似的问题做过线索,但由于我缺乏细节,答案并没有真正与我需要的内容有关,所以我会尽可能详细地解释我的问题,希望它能够将更容易理解我的要求。

我在youtube上观看了Bucky的光滑游戏教程并制作了一个2D Java游戏,该游戏基本上是一个从上方观看的2D玩家(鸟瞰图)可以使用用户键输入(向上,向下,向左,对)。玩家移动的地图非常小,这意味着必须设置边界,以便玩家不能离开地图,让你更好地了解这是如何完成的,这里是设置voundries的教程:

http://www.youtube.com/watch?v=FgGRHId8Fn8

视频还会告诉您游戏的确切内容。 问题是,这些边界只需要一个轴意味着如果玩家向下走,你会说“如果玩家到达X轴上的坐标(数字)”,则将玩家的移动改为相反方向,这样他就不能去了更进一步。“ 现在这给我带来了一个问题,因为这只需要一个轴,所以很容易设置和理解但如果你看视频,在地图上有一个房子,我希望我的播放器不能走过那个也但这涉及到两个维度,我已经看过像矩形碰撞这样的东西,并且在其他帖子中看到了与它们相关的事情,但我感到困惑,因为我是Java的新手并且除了观看Bucky之外还没有真正做到这一点教程。

我的游戏类目前的代码有以下方法:init,render和update。总结一下,我真的只想设置一种不让我的玩家穿过房子的方法,我也会提到(我应该在其他主题中提到它),因为我对Java很新,你能不能请采用一步一步的方法向我展示如何设置碰撞,我的意思是甚至可以根据需要制作矩形等基本知识。

如果我的代码是必需的,请告诉我,我会尽快发布。

提前谢谢。

3 个答案:

答案 0 :(得分:0)

两种可能的选择:

  1. 扩展ShapeRectangle或相关的Slick对象(它们应该存在于IMO中)并检查intersect()

  2. 查找(x1,y1)(x2,y2)值,使其从外部开始并在内部结束。

  3. 假设你有intersect()方法:

    //Grab the previous position
    prevPosX = movingobject.X;
    prevPosY = movingobject.Y;
    //Update the position
    movingobject.update();
    
    //Test for collision
    if(movingobject.intersects(targetobj)) {
        //If it collided, move it back 
        movingobject.X = prevPosX;
        movingobject.Y = prevPosY;
        //And reverse the direction 
        //(might want to do other stuff - e.g. just stop the object)
        movingobject.speed *= -1;  //Reverse the speed
    }
    

答案 1 :(得分:0)

您可以将电路板设置为具有“isBlocked”等属性的类的2x2网格。默认情况下,板的边缘将此属性设置为true以防止角色离开边缘。当您添加其他障碍物(如房屋或墙壁)时,对象占据的网格位置也将属性设置为true。然后在移动角色时,您只需检查角色移动到的网格位置是否将属性设置为false,以查看它是否是允许的移动。这也使得保存级别数据非常简单,因此您可以稍后从磁盘加载它们。

答案 2 :(得分:0)

在这种情况下,您的更新类还应添加一个条件来查找房屋。让我们说房子的cooridnates(假设这里的rectanglular房子为其他形状只改变x和y值)是(x1,y1)(x1,y2)(x2,y2)(x3,y1)你必须添加一个条件来制作当然 x值不在x1和x2之间,同时y值不能在y1和y2之间。