我是Android的新手,并根据AndEngine(www.andengine.org)开发了一款小型游戏。

该游戏显示背景的瓷砖地图,具有不同类型的瓷砖(有些可移动,有些可旋转)。我还在屏幕上画了一些线条。

问题是,当游戏首次运行时(通过电话运行,从Eclipse开始)时,它会完美运行,但是如果我使用手机的后退按钮退出游戏,并从手机HomeScreen图标重新启动游戏,则应用程序非常麻烦。线路不再出现在屏幕上,移动和旋转图块的功能仅能工作一次,因此游戏是非运营的。它不会崩溃,但是游戏引起的错误重新启动使其毫无用处。

我已经阅读了在应用程序生命周期上找到的所有内容,并尝试将各种对象设置为ondestroy()方法中的null,但是我所做的任何事情都没有任何区别。从第一个应用程序运行中,某些东西显然“徘徊”,并在第二次开始时会引起问题。请帮助,24小时的谷歌搜索和破坏我的大脑毫无结果。

谢谢,史蒂夫

PS在模拟器中运行时相同的行为。

更新:

我进一步调查了我的代码:

我创建了一个小程序来研究上述问题的一部分,绘制了一条线,并且没有在应用程序的重新运行中绘制。

使用和发动机必须覆盖OnloadScene()。在此方法中,您在启动时指定您在屏幕上想要的内容,该方法返回场景对象。一个场景可以处理您在屏幕上看到的内容,因此,如果您想说,在屏幕上添加一条新线(或Sprite或其他),请致电myScene.Addentity(myline)。我创建了一个主活动类和一个名为Myline的类,该类别绘制了该行。

我的主要活动:

public class LineTest extends BaseGameActivity {

@Override
    public Scene onLoadScene() {
        scene = new Scene(1);
        myLine = new MyLine();
        myLine.displayLine();   
        return scene;
    }
}

myline课:

public class MyLine {

    static final Scene SCENE = LineTest.scene;
    static final int LINE_WIDTH = 4;

    Line line = new Line(0,0,0,0);

    public MyLine() {
    }

    public void displayLine() {
        line.setLineWidth(4);
        line.setColor(1f, 0f, 0f);
        line.setPosition(10, 10, 400, 400);
        SCENE.getBottomLayer().addEntity(line); 
    } 

    public void removeLine() {
        SCENE.getBottomLayer().removeEntity(line);
    }
}

您可能会注意到上述问题,在我的辩护中,我是Java和OOP的新手。我的活动仅使用一个场景,所以我想,在我的线课中,我可以将场景声明为静态决赛,因为它不会改变。错误的!调试程序,我发现静态最终场景曾经设置,即使在程序停止(使用后键)并重新启动后,也永远不会改变。但是,当程序重新启动代码场景=新场景(1)时;创建一个带有新ID的新场景,因此静态最终场景指向旧场景,而不是新场景,因此在新场景中没有创建任何行。

我发现有两个选择可以解决这个问题:

任何一个:

Scene SCENE = LineTest.scene;

或者:

static Scene SCENE;

在构造函数中:

    SCENE = LineTest.scene; //I could also pass scene as param to 
constructor which may be better OOP practice.

我怀疑我的游戏应用程序的其他问题都与将其宣布为静态或静态决赛有关。

决定什么类型变量(和方法)应该是我可以使用的经验法则?

更新:我的游戏类中有三个变量,当时它们应该只是静态的静态决赛。将它们更改为静态并在构造函数中分配它们已经解决了所有问题,Woohoo! {:-)

有帮助吗?

解决方案

当您的实例特定时,为什么您的班级中甚至有一个静态字段?使其成为实例变量左右。

您也可以在打开应用程序时手动重置所有静态字段,但这将是 非常 丑陋。

其他提示

从第一个应用程序运行中,某些东西显然“徘徊”,并在第二次开始时会引起问题。

您是否创建了自己的应用程序子类?如果您在应用程序级别上对游戏进行一些初始化,然后在活动级别进行其他初始化,那么将不重复使用,直到应用程序本身被杀死并重新启动为止。只需使用返回按钮退出不会直接杀死该应用程序。

请注意使用静态最终变量!!!解决我上面的问题。

我也遇到了这个问题,并通过删除一些静态变量和静态方法来解决它。我知道当单击Android中的返回按钮时,静态变量将保持在内存中,但是我仍然不知道为什么效果如此奇怪。也要感谢上面的每个人!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top