ActionScript Flash登录开发及游戏进度存储与服务器提交技术咨询
解决方案:Flash游戏的登录、进度存储与服务器提交
嘿,这个需求光靠Flash肯定搞不定,必须配合后端服务——PHP就是个非常合适的选择,我来给你拆解清楚:
为什么不能仅用Flash?
你提到的“把数据存在变量里”只能在当前会话生效,关闭Flash文件后数据就没了。虽然Flash有SharedObject(类似浏览器的Cookie/localStorage)可以存在用户本地,但有两个致命问题:
- 不安全:用户可以轻易找到本地存储文件修改进度/分数,完全没法保证数据真实性;
- 无法同步到服务器:客户要求一周后提交分数到服务器,本地存储的数据没法主动传到服务器,也没法做跨设备的进度同步。
另外,登录验证必须依赖服务器——Flash本地没法判断用户身份是否合法,总不能让用户随便输入个名字就算登录吧?
推荐的技术方案:Flash + PHP + 数据库
这套组合轻量又容易实现,具体流程是这样的:
1. 登录功能实现
- Flash端:做一个登录界面,收集用户名/密码,通过
URLLoader发送POST请求到你的PHP接口; - PHP端:接收请求后,连接数据库(比如MySQL)验证用户信息是否存在,返回验证结果(比如成功则返回用户ID,失败提示错误);
- Flash端:收到成功响应后,把用户ID存在
SharedObject里,后续所有请求都带上这个ID,用来标识用户身份。
2. 游戏进度记录
- 用户玩游戏时,Flash可以在关键节点(比如完成一关、更新分数)触发请求,把当前进度(比如关卡数、当前分数)和用户ID一起传给PHP;
- PHP端:把这些数据写入数据库,关联对应的用户ID,覆盖旧的进度数据(或者按时间戳记录历史)。
3. 一周后提交分数
- 可以在用户首次登录时,让PHP把登录时间存在数据库里;
- 每次用户打开Flash文件时,先请求PHP接口检查当前时间和首次登录时间的间隔:
- 如果没到一周:正常加载进度;
- 如果已满一周:PHP把该用户的最终分数标记为待提交(或者直接提交到目标服务器),Flash提示用户活动结束,不能再游玩。
简单代码示例
Flash端发送进度的核心代码
var request:URLRequest = new URLRequest("save_progress.php"); request.method = URLRequestMethod.POST; var variables:URLVariables = new URLVariables(); variables.user_id = "123"; // 从登录时的响应获取 variables.game_score = "500"; variables.current_level = "3"; request.data = variables; var loader:URLLoader = new URLLoader(); loader.load(request);
PHP端接收并存储的核心代码
<?php $user_id = $_POST['user_id']; $game_score = $_POST['game_score']; $current_level = $_POST['current_level']; // 连接数据库(这里用MySQL示例) $conn = mysqli_connect("localhost", "username", "password", "game_db"); // 写入或更新进度 mysqli_query($conn, "REPLACE INTO user_progress (user_id, game_score, current_level) VALUES ('$user_id', '$game_score', '$current_level')"); mysqli_close($conn); echo "success"; ?>
额外提醒
- 注意数据安全:PHP接口要做参数校验,防止SQL注入;
- 如果需要更高效的交互,可以用Flash的AMF(Action Message Format)和PHP通信,比HTTP POST更轻量;
- 本地的
SharedObject可以用来做临时缓存,比如用户断网时先存本地,联网后再同步到服务器,提升用户体验。
内容的提问来源于stack exchange,提问作者Ajitesh Shukla
相关产品推荐
相关产品推荐

