Kivy:在iOS上使用JSON文件记录高分时出错
我试着为一个应用设置一个高分追踪器,使用了一个JSON文件和Kivy中的json存储语言。
我导入了JSONstore,然后在我的主游戏类中做了
class Game(FloatLayout):
highscorejson = JsonStore('highscore.json')
highscore = NumericProperty(highscorejson.get('highscore')['best'])
在初始化这个类之后,我有一个结束游戏的函数,这个函数会结束游戏并检查新的分数是否超过了之前的最高分。
def end_game(self):
if self.score > self.highscore:
self.highscorejson.put('highscore', best = self.score)
self.highscore = self.highscorejson.get('highscore')['best']
在Kivy中运行时,这一切都运行得很好,但当我通过XCode在我的iPhone上测试时,如果分数超过最高分,游戏结束时就会崩溃。错误信息如下。
File "/usr/local/lib/python2.7/site-packages/kivy/storage/__init__.py", line 174, in put
File "/usr/local/lib/python2.7/site-packages/kivy/storage/jsonstore.py", line 39, in store_sync
IOError: [Errno 1] Operation not permitted: 'highscore.json'
2014-06-24 21:59:34.385 cookie[2320:60b] Application quit abnormally!
2014-06-24 21:59:34.457 cookie[2320:60b] Leaving
完整错误信息: http://pastebin.com/Zy0DtysW
2 个回答
1
你可能是在尝试把文件保存到一个不合法的位置。试着给你想要保存的文件加上完整的路径 - 你可以使用 kivy_home_dir
来帮助你完成这个操作。
from kivy import kivy_home_dir
from os.path import join
highscore = JsonStore(join(kivy_home_dir, 'highscore.json'))
1
我也曾经遇到过这个问题,最后我终于解决了它。下面的代码对我帮助很大。
from os.path import join
class MyApp(App):
def build(self):
data_dir = getattr(self, 'user_data_dir')
store = JsonStore(join(data_dir, 'storage_file.json'))
根据我的理解,user_data_dir
是一个存储每个应用和操作系统独特路径的地方,这个路径是当前应用代码存放的地方。