|
|
5 kuukautta sitten | |
|---|---|---|
| .. | ||
| CombatStateManager.ts | 5 kuukautta sitten | |
| CombatStateManager.ts.meta | 5 kuukautta sitten | |
| GameManager.meta | 5 kuukautta sitten | |
| GameManager.ts | 5 kuukautta sitten | |
| GameManager.ts.meta | 5 kuukautta sitten | |
| LevelConfigManager.ts | 5 kuukautta sitten | |
| LevelConfigManager.ts.meta | 5 kuukautta sitten | |
| LevelManager.ts | 5 kuukautta sitten | |
| LevelManager.ts.meta | 5 kuukautta sitten | |
| LevelStateManager.ts | 5 kuukautta sitten | |
| LevelStateManager.ts.meta | 5 kuukautta sitten | |
| README_SaveSystem.md | 5 kuukautta sitten | |
| README_SaveSystem.md.meta | 5 kuukautta sitten | |
| SaveDataManager.ts | 5 kuukautta sitten | |
| SaveDataManager.ts.meta | 5 kuukautta sitten | |
| UIStateManager.ts | 5 kuukautta sitten | |
| UIStateManager.ts.meta | 5 kuukautta sitten | |
本存档系统为Pong游戏提供完整的玩家进度保存和管理功能,记录玩家的关卡进度、货币、道具、统计数据等信息。
// 获取存档管理器实例
const saveManager = SaveDataManager.getInstance();
saveManager.initialize();
// 获取玩家信息
const playerLevel = saveManager.getPlayerLevel();
const currentLevel = saveManager.getCurrentLevel();
const coins = saveManager.getCoins();
// 完成关卡
saveManager.completeLevel(levelId, score, time, stars);
// 添加货币
saveManager.addCoins(amount, 'level_complete');
saveManager.addDiamonds(amount, 'daily_reward');
// 在GameManager中初始化
private saveDataManager: SaveDataManager = null;
start() {
this.saveDataManager = SaveDataManager.getInstance();
this.saveDataManager.initialize();
}
// 游戏成功时
private onGameSuccess() {
const currentLevel = this.saveDataManager.getCurrentLevel();
const score = this.calculateScore();
const time = this.getGameDuration();
const stars = this.calculateStars();
this.saveDataManager.completeLevel(currentLevel, score, time, stars);
}
// 游戏失败时
private onGameDefeat() {
const currentLevel = this.saveDataManager.getCurrentLevel();
this.saveDataManager.failLevel(currentLevel);
}
// 在MainUIController中使用
export class MainUIController extends Component {
private saveDataManager: SaveDataManager = null;
start() {
this.saveDataManager = SaveDataManager.getInstance();
this.saveDataManager.initialize();
this.updateUI();
}
updateUI() {
// 更新玩家等级显示
const playerLevel = this.saveDataManager.getPlayerLevel();
this.playerLevelLabel.string = `Lv.${playerLevel}`;
// 更新货币显示
const coins = this.saveDataManager.getCoins();
this.coinsLabel.string = coins.toString();
}
}
interface PlayerData {
// 基本信息
playerId: string;
playerName: string;
createTime: number;
lastPlayTime: number;
totalPlayTime: number;
// 等级和经验
playerLevel: number;
experience: number;
experienceToNext: number;
// 货币系统
coins: number;
diamonds: number;
gems: number;
// 关卡进度
currentLevel: number;
maxUnlockedLevel: number;
levelProgress: { [levelId: number]: LevelProgress };
// 道具和装备
inventory: InventoryData;
// 统计数据
statistics: GameStatistics;
// 设置
settings: PlayerSettings;
}
interface LevelProgress {
levelId: number;
completed: boolean;
bestScore: number;
bestTime: number;
stars: number;
attempts: number;
firstClearTime: number;
lastPlayTime: number;
rewards: RewardData[];
}
getPlayerLevel(): 获取玩家等级getCurrentLevel(): 获取当前关卡getMaxUnlockedLevel(): 获取最高解锁关卡getCoins(): 获取金币数量getDiamonds(): 获取钻石数量getGems(): 获取宝石数量completeLevel(levelId, score, time, stars): 完成关卡failLevel(levelId): 关卡失败getLevelProgress(levelId): 获取关卡进度isLevelUnlocked(levelId): 检查关卡是否解锁isLevelCompleted(levelId): 检查关卡是否完成addCoins(amount, source): 添加金币spendCoins(amount): 消费金币addDiamonds(amount, source): 添加钻石spendDiamonds(amount): 消费钻石addGems(amount, source): 添加宝石addExperience(amount): 添加经验值addWeapon(weaponId, rarity): 添加武器addItem(itemId, count): 添加道具useItem(itemId, count): 使用道具savePlayerData(force): 保存玩家数据checkAutoSave(): 检查自动保存resetAllData(): 重置所有数据exportSaveData(): 导出存档数据importSaveData(dataString): 导入存档数据updateSetting(key, value): 更新设置getSetting(key): 获取设置值// 在游戏启动时初始化存档系统
const saveManager = SaveDataManager.getInstance();
saveManager.initialize();
// 显示玩家信息
const playerLevel = saveManager.getPlayerLevel();
const currentLevel = saveManager.getCurrentLevel();
const coins = saveManager.getCoins();
// 获取当前关卡信息
const currentLevel = saveManager.getCurrentLevel();
const isUnlocked = saveManager.isLevelUnlocked(currentLevel);
// 记录游戏统计数据
saveManager.updateStatistic('totalShotsfired', 1);
saveManager.updateStatistic('totalEnemiesDefeated', 1);
// 记录关卡完成
const score = calculateScore();
const time = getGameDuration();
const stars = calculateStars();
saveManager.completeLevel(currentLevel, score, time, stars);
// 给予奖励
saveManager.addCoins(baseReward, 'level_complete');
// 记录关卡失败
saveManager.failLevel(currentLevel);
// 保存数据
saveManager.savePlayerData(true);
系统提供了多个调试方法:
getSaveSummary(): 获取存档摘要信息exportSaveData(): 导出存档数据用于调试resetAllData(): 重置所有数据用于测试系统设计具有良好的扩展性,可以轻松添加:
通过修改相应的接口定义即可扩展功能,无需大幅修改现有代码。