我有一个级别场景,我允许用户选择一个级别。
但是要进入下一个级别,用户必须在它之前完成该级别。
现在是第一个自动解锁的关卡。
完成后我想解锁第二级。当第二级完成时,解锁第三级。
我想不出我会怎么做。我想到了共享偏好,但不知道我应该使用的逻辑。
我可以在这背后的逻辑上使用一些帮助。
任何人都可以帮助我吗?
编辑:
在我的游戏场景中,当游戏完成时,我将其称为共享偏好
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");
}
}
在级别选择场景中检查关卡是否已解锁。
这似乎并没有奏效。应该解锁的级别未解锁。
答案 0 :(得分:3)
有很多方法可以解决它。如果进展始终是线性的(1,2,3,4),那么您可以只存储“最大解锁级别”的整数,然后在完成级别时更新它。否则,您还可以拥有许多布线,例如“2级解锁”,当您完成1级时,您可以将“2级解锁”设置为true。共享偏好绝对是一种合理的方式。
答案 1 :(得分:2)
我要做的是在面向对象的视角中看待它,这就是Java的全部意义所在。当我卡在一段代码上然后我把它写下来。想一想代码的目标是什么。
您可能有一个名为Level的课程。在这个级别类中,您可以拥有一个名为“unlocked”的属性或相反的“locked”。然后,当用户进入“播放关卡”屏幕或您拥有的屏幕时,只允许用户查看已解锁的关卡。
你也可能有某种类型的Player类,所以你可以拥有一个名为“unlockedLevels”的属性,它是Level []类型。那么所有未锁定的级别都将在这个级别数组中。
所有关于代码的结构,结构和真实的对象定位是Java中最重要的事情。当你偏离面向对象设计时,你就会遇到本来不应该存在的问题。
答案 2 :(得分:2)
在某些时候,除非你的游戏从每次用户做一些其他事情开始时重新启动,否则你将保存游戏的状态。您可以保存用户的分数,游戏状态等。执行此操作时,无论如何都可以保存未锁定的级别。每个级别只有一点信息,所以你不需要对此有所了解。也许您还有一个“保存”按钮,保存文件,从保存加载的功能。再次,只需在保存其他所有内容时将用户的级别解锁。
或者你还没有开始保存任何东西吗?
好吧,首先将保存状态保存在活动生命周期方法的包中,例如onPause。如果多次保存适合您的游戏,请使用文件并确定其结构。如果只有一个“保存”可以,偏好可能对你很好。测试:如果您想计算首选项的键,请不要使用首选项。