5

我有一个名为 LinkGroup 的类,它包含一些游戏对象。我调用 Rotate 为这些对象设置一些旋转变量。每当我的游戏进入更新循环时,我都会根据旋转变量旋转对象。如果他们已经足够旋转,我会触发一个 onComplete 回调。

以下代码有效...

public void Rotate(){
    _currentRotation = _0;
    _targetRotation = 180; //degrees
    _rotationSpeed = 50;

    try{
        _onComplete = LinkGroup.class.getDeclaredMethod("rotateComplete", null);
    }
    catch(Exception ex){

    }
}

...但这很丑陋。

我不喜欢必须声明方法 rotateComplete 并通过字符串手动将其链接到 Rotate。是否有类似于 C# 中的匿名函数的东西,所以我可以在 Rotate 方法中声明 rotateComplete 方法?

对于加分,是否有更好的方法来实现“getDeclaredMethod”所需的异常处理?简洁是一种偏好。

4

3 回答 3

8

据我了解,我相信每当旋转某些游戏对象时,您都会尝试调用类onRotateComplete()中的方法。LinkGroup您可以使用 Java Swing 用于处理按钮单击或其他事件的模式:这可以通过以下方式完成:

定义一个接口

interface IRotateHandler {
    public void onRotateComplete();
}

更改Rotate()Rotate(IRotateHandler handler)然后在LinkGroup课堂上您可以像这样调用您的游戏对象。

gameObject.Rotate(new IRotateHandler() {
    public void onRotateComplete() {
        /* do your stuff!
    }
}
于 2012-12-25T04:25:45.130 回答
4

你不需要使用getDeclaredMethod. 只需做_onComplete一个Runnable(或类似的),并创建一个匿名类:

public void Rotate(){
    _currentRotation = _0;
    _targetRotation = 180; //degrees
    _rotationSpeed = 50;

    _onComplete = new Runnable() {
            public void run() {
                rotateComplete();
            }
        };
}
于 2012-12-25T04:12:47.730 回答
0

Java 7 还没有闭包。 Java 8 会。 因此,目前还没有办法在 Java 中匿名编写该函数。

至于错误处理,快速浏览一下 API就会发现你抛出了两个RuntimeExceptions和一个ReflectiveOperationException. 捕捉Exception可能是您最好的选择,除非您想以不同的方式捕捉所有这三种可能的异常,并根据每种异常采取不同的行动。

于 2012-12-25T04:11:03.107 回答