【问题标题】:java: Bad Time with methods, not returning what it´s supposed too.java:使用方法的错误时间,不返回它应该返回的内容。
【发布时间】:2012-09-04 18:27:53
【问题描述】:

我已经调试了好几个小时了。检测碰撞。下面的代码可以正常工作。

while (numberOfTurns >= 0)                                      
            {   
        GObject collision = getElementAt(ball.getX(),ball.getY());
        }

它将在屏幕上获取任何与球碰撞的图形对象并将其返回。但是,这不是我想要设计程序的方式。但改为使用单独的方法进行碰撞检测,如下所示:

    while (numberOfTurns >= 0)                                      
        {   
        getCollidingObject();
        }

这是方法,它只是返回自己

private GObject getCollidingObject()
{       
    return getElementAt (ball.getX(),ball.getY());
}

然后我将它分配给这个私有实例变量

private GObject collider = getCollidingObject();

但是!!!它不起作用,它只是返回null。我发布的第一个代码 sn-p 工作正常...有人知道这里发生了什么吗?

【问题讨论】:

    标签: java variables methods instance


    【解决方案1】:

    您说您将getCollidingObject() 的返回值分配给一个私有实例变量。使用您发布的代码,该调用在构造对象时进行一次,而不是每次您想要结果时。试试:

    while (numberOfTurns >= 0)                                      
        {   
        GObject collision = getCollidingObject();
        }
    

    【讨论】:

    • 但是 getCollidingObject() 方法在一个while循环中,所以它应该相应地更新实例变量
    • getCollidingObject(),正如您所展示的那样,不会更改任何实例变量的值,因为没有分配给任何实例变量。
    • 忽略我之前的帖子,你的正确,当我将它分配给 while 循环内的 GObject 时,它可以正常工作。显然是我对机制的误解..
    • 我认为您可能正在设想getCollidingObject() 的返回值以某种方式“附加”到collider 实例变量的情况。 Java 不能以这种方式工作,并且对collider 的赋值只会在构造对象时发生一次。稍后调用 getCollidingObject() 让您有机会以其他方式使用返回值(如果您愿意,甚至可以将其分配给 collider)。
    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2022-11-03
    • 2012-07-07
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多