光滑2d |实体碰撞检测

2023-12-11

问题:

我知道这个问题已经被问过很多次了,但我没有找到任何好的答案。
所以我已经为我的游戏准备了一些实体,现在检查碰撞的最佳方法是什么?

Links:

游戏(已完结)

代码解释:
我有一个世界级的实体列表:

List<Entity> entities = new ArrayList<Entity>();
// The list in the World class

我用以下代码更新它们(仅当在视图范围内时):

public void update(GameContainer gc, int delta) {
    for (int i = 0; i < entities.size(); i++) {
        entities.get(i).update(gc, delta);
    }
}
// Update entities

所以现在我想检查实体更新方法内的冲突。

我尝试将此作为我的更新方法:

@Override
public void update(GameContainer gc, int delta) {
    for (Entity entity : world.entities) {
        if (intersects(entity)) {
           // world.remove(this);
        }
    }
}
// The update method of an entitiy

这是当前的 intersects 方法:

public boolean intersects(Entity entity) {
    if (entity instanceof Player) {
        // Do nothing
    } else {
        if (shape != null) {
            return this.getShape().intersects(entity.getShape());
        }
    }

    return false;
}
// The intersects method of the abstract Entity class

目前 intersects 方法始终返回 true。但为什么?


执行此操作的经典方法是让每个实体关联一个形状边界框,然后在形状上使用 Slick2d 的“相交”方法:

http://www.slick2d.org/javadoc/org/newdawn/slick/geom/Shape.html#intersects(org.newdawn.slick.geom.Shape)

我相信有一种方法可以对精灵进行逐像素检查,但如果不需要像素级精度,则边界框方法会更有效。

一些代码:

在您的实体抽象类中添加:

private Shape boundingBox;

public Shape getBoundingBox() {
  return this.boundingBox;
}

那么你的相交方法是:

public boolean intersects(Entity entity) {
    if (this.getBoundingBox() == null) {
        return false;
    }
    return this.getBoundingBox().intersects(entity.getBoundingBox());
}

然后,您需要为要检查碰撞的每个实体设置一个边界框。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

光滑2d |实体碰撞检测 的相关文章

随机推荐

  • 如何调试:WCF服务调用在VS中有效,但在IIS中无效

    我正在尝试使用 ASP Net AuthenticationService 对我的 Silverlight 应用程序中的用户进行身份验证 我有一个 Web 应用程序 其服务指向 System Web ApplicationServices
  • 如何使用附加图像更新模型?

    我创建一个组件编辑一个模型并上传图像 this is edit component html
  • 如何检查用户是否是组成员

    我的目标是检查用户是否是特定活动目录组的成员 In net mvc我在我的服务中使用了这段代码 HttpContext Current Request LogonUserIdentity Groups Any x gt x Translat
  • 正则表达式在 Expect 缓冲区中查找字符串

    我正在尝试找到一个可匹配转义字符字符串的正则表达式 Expect 响应 请参阅这个问题 和一个六位数字 第一个字符为字母数字 这是我需要识别的整个字符串 r n u001b 1 14HX76196 最终我需要提取字符串 X76196 这是我
  • 发送一个 ViewModel,其中包含一个带有 Html.BeginForm 的列表(MVC 4)

    我的视图模型包含一个整数列表 我遇到的问题是 当我发送修改后的表单视图模型时 它始终等于 null 我的视图模型 public class testViewModel public List
  • Heroku LoadError:libruby.so.2.2

    当我尝试将更改推送到 Heroku 上的 staging dyno 时 我在构建时收到了以下消息 git push staging remote gt Installing dependencies using 1 9 7 remote R
  • 在 Android 上使用 sqlite(带有 FTS)

    我正在使用 sqlite FTS3 数据库和我的 Android 应用程序 public Cursor getWordMatches String query String columns String selection KEY WORD
  • 网络订单简称 (Java)

    我需要发送一个网络订单 简称为我使用 Java 编写的游戏服务器 我阅读了有关网络顺序的信息 但找不到有关数据之前发送的短路的任何详细信息 有人可以向我解释一下它是什么 以及如何使用 Java 将其发送给客户端吗 Java NIO 字节缓冲
  • 为什么运算符模块缺少“and”和“or”?

    operator模块可以轻松避免不必要的函数和 lambda 在这样的情况下 import operator def mytest op list1 list2 ok op i1 i2 for i1 i2 in zip list1 list
  • DefType 语句是否被视为不好的做法?

    我想听听您对为什么或 为什么不 应该 或不应该 使用这个声明的想法 由于这有点主观 这是我的标准 出于具体原因而投票 而不是不合理的意见 最终接受的答案将是最全面的答案 在精心设计的节目中 Defxxx语句是没有意义的 因为所有变量和函数都
  • Nativescript Datepicker更改文本颜色

    我正在尝试将 Android 中的日期选择器颜色更改为白色 我尝试过在 styles xml 中使用 colorPrimary 但没有成功
  • 如何在 Tomcat 6 中部署战争

    我使用过 Jboss 部署是通过将 war 放到部署文件夹中来进行的 但是当我将 war 项目设置为 Tomcat 服务器时 eclipse 声称它正在部署 war 但我在 webapps 文件夹中看不到我的 war 我的战争的网址是什么
  • 在 Windows 中将 __int64 转换为 long

    如何在 Windows MSVC8 和 MSVC6 中将 int64 转换为 long 正常的打字能起作用吗 另外 将 long 转换为 int64 怎么样 如果long是一个负值 它会起作用吗 注意 我正在讨论这样一种场景 其中 int6
  • 在 python 中重命名“def”(和其他关键字)[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在尝试为自定义语言编写一个 解释器 该语言与 python 非常相似 但也有一些区别 例如 Python def subRoutine print hello Custom sub s
  • NSTextStorage 对大小和更新频率的限制

    我正在尝试创建一个类似终端的应用程序 可以在应用程序运行时显示日志 当前的实现使用 NSScrollView gt NSTextView 但是 我注意到 NSTextView 的大小对于我的程序来说不够大 并且我无法经常更新 UI 假设我们
  • 从 SDN 4.0 迁移到 SDN 4.1.RC1 时出现 GraphQueryLookupStrategy.resolveQuery 异常

    我正在将应用程序迁移到使用 SDN 4 1 0 RC1 但在尝试启动应用程序后遇到了一些问题 我已经进行了必要的配置更改 以正确使用远程服务器 localhost 7474 的 HTTPDriver 并且在启动应用程序时 在尝试加载 spr
  • 有没有更奇特的方法来获得同等级的先前物品?

    我有这样的表行 tr class parent0 row3 td td tr tr class parent3 row7 td td tr tr class parent3 row12 td td tr tr class parent0 r
  • 无法使用 Sustainsys 的 Saml2 注销

    这应该将我的应用程序重定向到我的 AdFs 注销页面 然后将我重定向回我的应用程序 然而 它只是将我重定向到我的路线 logout 查看我的 ADFS 服务器上的日志 没有任何反应 AllowAnonymous HttpGet Route
  • 为谷歌折线图动态透视数据

    我想在同一个折线图中显示多年来各个国家的 人口 显示的数据基于多选下拉列表 国家 地区 中的选择 基础数据表有 3 列 年份 国家 人口2012年 A国 332013年 A国 352014年 A国 402012年 B国 652013年 B国
  • 光滑2d |实体碰撞检测

    问题 我知道这个问题已经被问过很多次了 但我没有找到任何好的答案 所以我已经为我的游戏准备了一些实体 现在检查碰撞的最佳方法是什么 Links 游戏 已完结 代码解释 我有一个世界级的实体列表 List