好的,所以我有一个ArrayList,其中包含需要绘制到屏幕的所有图块,我有使用箭头键移动的播放器,但我不确定如何用这个实现碰撞检测,它会不会高效检查当前的瓷砖是否已填满,如果是,请停止,这是我第一次从头开始制作游戏,所以非常感谢任何帮助!
编辑: 这些图块是32x32图像,如果你们可以帮助我解决y轴碰撞问题,那么这些图像基本保存在ArrayList中。 Tile类包含x,y和tile类型
EDIT2:我还没有尝试任何东西,我真的不知道从哪里开始,但基本上我需要在瓷砖上进行某种碰撞,例如,当玩家正在移动时如果在瓷砖上碰撞做某事但我不知道如何检查是否我碰撞了不是
答案 0 :(得分:1)
下面我有一个弹跳球的例子,它将测试JPanel的结尾,并做一些事情
//x = X-Axis Location //This tests for a collision of the JPanel on the left side or the right side
public boolean isLeavingSideToSide(JPanel jp)
{
if( x <=0 || x+ width >= jp.getWidth())
{
BounceEvent be = new BounceEvent(this);
notifyListeners(be);
return true;
}
else
return false;
}
创建BounceEvent以允许notifyListener调用bounced方法。
public void notifyListeners(BounceEvent be)
{
for(BounceListener bl : listeners)
{
bl.bounced(be);
}
}
我的弹跳方法会改变球的颜色(做一些动作)
public void bounced(BounceEvent be) {
Ball b = be.getBall();
Color c = b.getColor();
int x = 256;
int newColor1 = (int) (Math.random() * x);
int newColor2 = (int) (Math.random() * x);
int newColor3 = (int) (Math.random() * x);
b.setColor(new Color(newColor1,newColor2,newColor3));
}
希望这有助于您开始使用。
答案 1 :(得分:1)
碰撞检测对初学者来说无关紧要,也不能在Stackoverflow帖子中完全解释;如果你仍在努力使用数组,那么尝试制作简单的游戏,通过计算圆圈等对象之间的距离来检测碰撞。
有许多方法可以处理碰撞检测,但您必须更加具体:
您打算开发什么样的平铺游戏?
我强烈建议您阅读Katy Coe撰写的this article,其中提供了一些实现的摘要。上述博客中解释了以下方法。
最简单,最直观的方法是像素颜色方法,玩家可以在具有特定颜色值的图块上移动,但只能使用有限的调色板。 Mask Approach 与PCA基本相同,但它隐藏了自定义图形背后的黑白图层;后者的计算成本很高,一般不推荐使用。
基于网格的方法可能正是您所寻找的。地图的每个元素对应于网格的图块(由2D阵列描述)。尽管动画可能会假装流畅的动作,但玩家会在一个离散的空间中移动。
像素平铺方法描述了具有n个控制点的周围字符的碰撞;这种方法让开发人员在平铺世界中使用非平方字符。 边界框方法是一种更简单的PTM实现,其中播放器包裹在一个矩形中。该程序检查矩形的四个角中的任何一个角是否与任何墙相交。
离散碰撞检测或其改进版本投机联系人,用于更复杂的游戏,您现在肯定不需要这些。
不要试图一次性学习所有内容,从您能想到的最简单的实现开始。 否则,你很快就会气馁,也不会理解每种技术的利弊。
我最近发现了this great tutorial关于使用Macromedia Flash的基于图块的游戏,但您可以使用您选择的语言轻松应用这些技术。 阅读它! 如果您想要替代Katy的文章,Rodrigo Monteiro comes in help。