微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的游戏碰撞系统不能在不止一个图块上工作

如何解决我的游戏碰撞系统不能在不止一个图块上工作

我正在为我的游戏开发一个碰撞系统,但是我无法让它工作,如果我添加了不止一面墙(这是我正在渲染的对象),碰撞系统不起作用并且我可以通过障碍物。

但是,如果我只留下一堵墙,碰撞可以正常工作,或者在循环结束时我添加一个中断; 碰撞有效,但只在地图的第一面墙上,其他人没有碰撞。

有谁知道如何解决这个问题?我已经尝试解决了 2 天,但我无法解决

from pydub import AudioSegment

file = AudioSegment.from_mp3("example.mp3")
file.export("new.wav",format="wav")

解决方法

我很确定问题出在这个调用上:

area.intersect(new Area(Wall));

这是该方法的 JavaDoc:

public void intersect(Area rhs)

设置这个Area的形状与其当前形状的交点 以及指定区域的形状。该区域的最终形状 将仅包括包含在此区域中的区域,也包含在此区域中的区域 在指定区域。

所以 area 代表您的播放器的形状,每次测试都会修改一堵墙,这就是为什么它只对一面墙起作用。

您可以通过简单地将玩家 Area 作为调用的参数来解决该问题,如下所示:

Area wallArea = new Area(Wall); 
wallArea.intersect(area);
if(wallArea.isEmpty()){
    return true;
}

顺便说一句,这个逻辑是相反的,不是吗。难道你不想检查结果区域不是空的,即玩家和墙壁之间有重叠吗?

另一种选择,如果每个 Wall 实际上是一个矩形,则使用 this Area 方法:

公共布尔相交(双x, 双y, 双 w, 双 h)

测试 Shape 的内部是否与 a 的内部相交 指定的矩形区域。矩形区域被认为是 如果任何点都包含在两个内部,则与 Shape 相交 Shape 和指定的矩形区域。

像这样:

if(area.intersects(atual.getX(),atual.getY(),16,16)) {
    return true;
}

因为这避免了为每面墙创建一个 Area 对象,并且相交测试将变得更加简单和快速。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。