当前位置: 首页 > 知识库问答 >
问题:

多边形contains()引发NullPointerException

何安宜
2023-03-14

在某些情况下,我正在开发一个小行星游戏

所以,我的小行星是一个多边形(Java内置对象),子弹只是一个点。当我试图探测小行星和子弹之间的碰撞时,我使用Polygon.contains(x,y)和子弹坐标。但出于某种原因,我得到NullPointerExcure时使用这种方法,但我只得到异常有时99%的时间一切完美的工作,然后我得到这个异常。当我射击子弹时,我会得到一个异常,如果抛出异常,子弹就会停止(子弹是一个线程,所以线程死了)。

以下是相关代码:

for (int i = 0; i <= Math.ceil(l); i++) {
            try {
                t = i / (l - extension);
                y = (int) ((t * (cursorPos.y - initY)) + initY);
                x = (int) ((t * (cursorPos.x - initX)) + initX);
                if (!PlayerPanel.meteorList.isEmpty()) {
                    synchronized (PlayerPanel.meteorList) {
                        for (int j = 0; j < PlayerPanel.meteorList.size(); j++) {
                            if (PlayerPanel.meteorList.get(j).shapes[PlayerPanel.meteorList.get(j).selectedMeteor].contains(x, y)) { // Line 39
                                PlayerPanel.meteorList.get(j).shapes[PlayerPanel.meteorList.get(j).selectedMeteor].invalidate();
                                PlayerPanel.playerScore+=10;
                                PlayerPanel.scoreLabel.setText("Score: " + PlayerPanel.playerScore);
                                synchronized (PlayerPanel.bulletList) {
                                    PlayerPanel.bulletList.remove(this);
                                }
                                PlayerPanel.meteorList.remove(PlayerPanel.meteorList.get(j));
                                return;
                            }
                        }
                    }
                }
                TimeUnit.NANOSECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

小行星被储存在一个列表里子弹也一样

例外情况:

Exception in thread "Thread-2" java.lang.NullPointerException
    at java.desktop/java.awt.Polygon.getBoundingBox(Polygon.java:335)
    at java.desktop/java.awt.Polygon.contains(Polygon.java:398)
    at java.desktop/java.awt.Polygon.contains(Polygon.java:364)
    at Bullet.run(Bullet.java:39)

共有1个答案

寿丰
2023-03-14

如果播放面板。流星名单或PlayerPanel。公告列表不是使用集合的线程安全集合(如vector)。同步列表:

 List list = Collections.synchronizedList(new ArrayList(...));
 类似资料:
  • 返回顶点的输入数组,并且附有一些其他方法,如下面所描述 polygon.area() 返回此多边形的标定区域。如果顶点是逆时针顺序,面积为正,否则为负。 polygon.centroid() 返回一个表示此多边形的质心的两元素数组。 polygon.clip(subject) 对这个多边形剪切主题多边形。换句话说,返回一个多边形表示这个多边形和主题多边形的交集。假定剪切的多边形是逆时针方向以及凸多

  • 基础示例 <vuep template="#example"></vuep> <script v-pre type="text/x-template" id="example"> <template> <div class="amap-page-container"> <el-amap vid="amap" :zoom="zoom" :amap-manager="ama

  • SVG 多边形 - <polygon> 实例 1 <polygon> 标签用来创建含有不少于三个边的图形。 多边形是由直线组成,其形状是"封闭"的(所有的线条 连接起来)。 polygon来自希腊。 "Poly" 意味 "many" , "gon" 意味 "angle". 下面是SVG代码: <svg xmlns="http://www.w3.org/2000/svg" version="1.1"

  • 我正在寻找一种方法来创建一组多边形(rechtangles),沿着一条线在多个多边形中创建一组多边形(rechtangles),并将其水平隔开,如图所示。 我尝试生成点并将其用作多边形的中点,但问题是,通过创建等间距的点光栅,除了180度之外,不可能以任何其他方向旋转。 例子 给出了一个多多边形形状的对象和由宽度和高度以及每个多边形之间的垂直和水平间距定义的多边形。多边形应仅放置在多多边形内,且不

  • 所以我目前正在开发一个Bukkit(技术上是插口插件),我希望当一个玩家第一次加入时,它能在一个文件(players.yml)中生成一个字符串。 我目前有: 我基本上要做的是在每个玩家第一次加入时在文件中创建一个字符串“player”。 例如,如果一个球员的名字鲍勃第一次加入,该文件将生成 但是,我不希望每次玩家加入时都重置它,因此我尝试让它检查文件是否包含“bob”,如果返回null,它将创建它

  • 为什么这工作正常: 这会产生运行时错误 错误: 这没有任何意义。第一个代码工作正常,三角形画好了,但第二个代码不行。有人能解释一下我做错了什么吗...