Java Android游戏逻辑中的解锁级别

Java Android游戏逻辑中的解锁级别,java,android,andengine,Java,Android,Andengine,我有一个关卡场景,允许用户选择关卡 但要进入下一个级别,用户必须在它之前完成该级别 现在是自动解锁的第一层 当它完成时,我想解锁第二级。当第二层完成时,解锁第三层 我想不出我将如何着手做这件事。我想到了共享参考,但不知道我应该使用什么逻辑 关于这背后的逻辑,我需要一些帮助 有人能帮我吗 编辑: 在我的游戏场景中,当游戏完成时,我将其称为SharedReference editor.putString("level_completed"+level, "unlocked"); editor.com

我有一个关卡场景,允许用户选择关卡

但要进入下一个级别,用户必须在它之前完成该级别

现在是自动解锁的第一层

当它完成时,我想解锁第二级。当第二层完成时,解锁第三层

我想不出我将如何着手做这件事。我想到了共享参考,但不知道我应该使用什么逻辑

关于这背后的逻辑,我需要一些帮助

有人能帮我吗

编辑:

在我的游戏场景中,当游戏完成时,我将其称为SharedReference

editor.putString("level_completed"+level, "unlocked");
editor.commit();
那我就

String levelStatus = preference.getString("level_completed:"+level, "locked");

if(levelStatus.equals("unlocked")){

}else{
    if(level == 0){
        box.setUserData("unlocked");
}else{
        box.setColor(1.0f,0.0f,0.0f);
        box.setUserData("locked");
    }
}
在标高选择场景中,检查标高是否已解锁


这似乎不太管用。应该解锁的关卡不是解锁的。

有很多方法可以实现它。如果进度始终是线性的(1、2、3、4),那么您可以只为“最大解锁级别”存储一个整数,然后在完成某个级别时更新它。否则,你也可以有很多布尔值,比如“level 2 unlocked”,当你完成level 1时,你可以将“level 2 unlocked”设置为true。共享首选项绝对是一种合理的选择。

我要做的是从面向对象的角度来看待它,这就是Java的全部内容。当我被一段代码卡住时,我就把它写下来。想想代码的目标是什么

  • 您可能有一个名为Level的类。在这个级别的类中,您可以有一个名为“unlocked”或相反的“locked”属性。然后,当用户进入您的“播放关卡”屏幕或您所拥有的内容时,只允许用户查看解锁的关卡

  • 您可能还拥有某种类型的Player类,因此可以拥有一个名为“unlockdlevels”的属性,该属性的类型为Level[]。那么所有解锁的关卡都会在这个关卡数组中


这完全是关于代码的结构,结构和真正的面向对象是Java中最重要的东西。当你偏离面向对象的设计时,你可能会遇到本不应该存在的问题。

在某个时候,除非你的游戏从一开始就重新启动,每次用户做一些其他的事情,你都会保存游戏的状态。你保存用户的分数、游戏状态等。当你这样做时,不管你怎么做,也要保存解锁的关卡。每一级只有一点信息,所以你不需要对此很聪明。也许你还有一个“保存”按钮,保存文件,可以从保存中加载。同样,在保存其他所有内容时,只需将用户的级别解锁即可

还是你还没有开始存钱


首先,将状态保存在活动生命周期方法的捆绑包中,比如onPause。如果多个保存适合您的游戏,请使用文件并确定其结构。如果只有一个“保存”就可以了,那么首选项很可能对您很好。这方面的一个测试:如果你想计算一个偏好的键,不要使用偏好。

你可以用一个int来表示你在故事中所处的位置。它将存储您已完成的级别数,因此您将知道要解锁的内容。此外,在您的代码中,一个首选项有冒号,而另一个没有。感谢您指出这一点!!我想这解决了我的问题!我想我已经厌倦了。好建议!你是对的!现在,当用户完成一个关卡时,我会将其保存在共享首选项中。当用户在关卡选择屏幕上时,我测试以查看哪些关卡已完成或解锁。由于某种原因,这种方法对我不太管用。如果需要,我可以编辑我的答案。是的,请编辑。如果你能列出你的课程结构(相关部分)并告诉我你的课程中每个部分都做了什么,我会建议我应该做什么谢谢你的回答!查看我的更新以了解我的位置。我用的是偏好,