1
votes

I am programming an android game with Godot 3.2.2. Of course I want to save the game data, therefore I created a new scene called SaveGame.tscn with SaveGame.gd. I exported the project to my windows pc and everything worked fine, all datas were saved. After that I also exported it to my android phone, but this time no data was saved. Instead it showed me that it could not find the save path. Maybe anybody of you can help me with this problem so that data is also saved on android.

SaveGame.gd:

extends Control

const FILE_NAME = "user://save_game_data_one.json"

var save_game_data

func _ready() -> void:
    Signals.connect("load_data", self, "load")
    Signals.connect("game_quit", self, "save")
    save_game_data  = {
        "highscore": Globals.highscore,
        "coins": Globals.coins,
        "music_volume": Globals.music_volume,
        "sound_volume": Globals.sound_volume,
        "button_gameplay": Globals.button_gameplay,
        "button_gameplay_side": Globals.button_gameplay_side,
    }
    
func save():
    update_data()
    var file = File.new()
    file.open(FILE_NAME, File.WRITE)
    file.store_string(to_json(save_game_data))
    file.close()
    
func load():
    var file = File.new()
    if file.file_exists(FILE_NAME):
        file.open(FILE_NAME, File.READ)
        var data = parse_json(file.get_as_text())
        file.close()
        if typeof(data) == TYPE_DICTIONARY:
            save_game_data = data
        else:
            printerr("Corrupted data")
    else:
        self.show()     <---- Here it shows me the hidden scene (white rectangle), this means it could not find FILE_NAME
    export_data()
        
func export_data():
    Globals.highscore = save_game_data["highscore"]
    Globals.coins = save_game_data["coins"]
    Globals.music_volume = save_game_data["music_volume"]
    Globals.sound_volume = save_game_data["sound_volume"]
    Globals.button_gameplay = save_game_data["button_gameplay"]
    Globals.button_gameplay_side = save_game_data["button_gameplay_side"]
    
func update_data():
    if Globals.score_round >= Globals.highscore:
        save_game_data["highscore"] = Globals.score_round
    save_game_data["coins"] += Globals.coins_round
1

1 Answers

0
votes

I also would like to know the answer. I am trying to figure a way to have "persistent time" in my android game where "time passes" in game even when closed. Best solution I figure so far is getting the unix time on the games first start and check against it when reopening the app. My problem is finding a way to save that original unix time to call upon for checks.