-1

我过去曾就类似问题发表过帖子,但由于我缺乏细节,答案并没有真正与我需要的东西相关,所以我将尝试尽可能详细地解释我的问题,希望它会更容易让你明白我的要求。

我在 youtube 上观看了 Bucky 的 slick 游戏教程并制作了一个 2D Java 游戏,该游戏基本上是一个从上方(鸟瞰图)观看的 2D 玩家,可以通过用户键输入(上、下、左、右)在 2D 地图上移动。玩家四处移动的地图非常小,因此必须设置边界,以便玩家无法离开地图,以便您更好地了解这是如何完成的,这里是设置 voundries 的教程:

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

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

目前我的游戏类代码有以下方法:初始化、渲染和更新。所以总结一下,我真的只是想建立一种不让我的玩家穿过房子的方法,我也会提到(我应该在我的其他线程中提到它)因为我对 Java 很陌生,请你帮忙一步一步地向我展示如何设置碰撞,我的意思是如果需要的话,甚至是像制作矩形这样的基础知识。

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

先感谢您。

4

3 回答 3

0

在这种情况下,您的更新类还应该再添加一个条件来寻找房子。假设房子的坐标(假设矩形房子在这里用于其他形状只是改变 x 和 y 值)是 (x1,y1)(x1,y2)(x2,y2)(x3,y1) 你必须添加一个条件来制作确保 x 值不在 x1 和 x2 之间,同时 y 值不能在 y1 和 y2 之间。

于 2012-12-25T22:58:14.627 回答
0

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

于 2012-12-25T22:40:56.167 回答
0

两种可能的选择:

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

  2. 寻找(x1,y1)(x2,y2)重视它从外部开始并在内部结束。

假设您有 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
}
于 2012-12-25T22:36:05.863 回答