0

我正在创建一个使用 sharedObject 在本地保存每个玩家进度的游戏。它还连接到中央数据库以创建在线记分牌。当用户第一次插入分数时,唯一的 ID 会从数据库发送到 swf 并作为 sharedObject 数据的一部分保存。

绝对一切正常,ID 保存到 sharedObject,但是当 swf 重新启动时,ID 不会加载(即使保存在 sharedObject 中的其他变量确实加载)。

我认为这可能与它的格式化方式有关,也可能与 XML 有关,但我不确定。

闪存代码

function saveGame(currID:Number) {
 gameInfo.data["playername"+currID] = playername;
 gameInfo.data["playerscore"+currID] = playerscore;
 gameInfo.data["playerID"+currID] = playerID;
 gameInfo.data["playerLevel"+currID] = playerLevel;
 for(i=1; i<6; i++){
 gameInfo.data["level"+i+"Score"+currID] = ["level"+i+"Score"];
 }
 gameInfo.flush();
}

function loadGame(currID:Number) {
 playername = gameInfo.data["playername"+currID];
 playerscore = gameInfo.data["playerscore"+currID];
 playerID = gameInfo.data["playerID"+currID];
 playerLevel = gameInfo.data["playerLevel"+currID];
}

function scoreboardSubmit() {

var insertReceive:XML = new XML();
insertReceive.ignoreWhite = true;
insertReceive.onLoad = function() {
playerID = this.firstChild.childNodes[0];
saveGame(currID);
};
insertSend = new LoadVars();
insertSend.playername = playername;
insertSend.playerscore = playerscore;
insertSend.playerID = playerID;
insertSend.sendAndLoad("scoreboardSend.php", insertReceive, "POST");

}

PHP代码

<?php


$name = strip_tags($_POST['playername']);
$score = $_POST['playerscore'];
$id = $_POST['playerID'];

$con = mysql_connect("localhost","******","******");

mysql_select_db("******", $con);


if ($id == 0)
{

$insert="INSERT INTO scoreboard (Name, Score)
VALUES
('$name','$score')";

mysql_query($insert,$con);


$returnID = mysql_query("SELECT LAST_INSERT_ID()");

$playerID = mysql_result($returnID,0);

echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo "<returnID>" . $playerID . "</returnID>\n";

}
else
{

$update = mysql_query("UPDATE scoreboard SET Name = '$name', Score = '$score'
WHERE id = '$id'",$con);

}


mysql_close($con);
?> 
4

2 回答 2

0

感谢您的回答,但这不是问题。

我认为问题在于,当 sharedObject 在将变量存储为真数字时遇到问题并且只是将所有内容转换为字符串时,这对于分数来说很好,但对于 Id 则不行,因为它必须传递给 PHP。

通过使用 String('number') 将 ID 转换为要存储在 sharedObject 中的字符串,然后在从 sharedObject 中提取 ID 时将其转换回数字来解决它。

于 2010-03-01T23:18:31.020 回答
0

如果我理解得很好,你应该尝试在你的 XML 接收器对象中用 currID 替换 playerID,因为 atm 你把 xml 回复放在一个playerIDvar 中,并且在你调用 as arg 之后的行saveGamecurrID未定义的。

function scoreboardSubmit() {

 var insertReceive:XML = new XML();
 insertReceive.ignoreWhite = true;
 insertReceive.onLoad = function() {
  var currID = this.firstChild.childNodes[0];
  saveGame(currID);
 };
insertSend = new LoadVars();
insertSend.playername = playername;
insertSend.playerscore = playerscore;
insertSend.playerID = playerID;
insertSend.sendAndLoad("scoreboardSend.php", insertReceive, "POST");

}

您应该将正确的内容类型添加到您的 php 页面

header('Content-type: text/xml');

最后,我认为以不同的方式存储您的数据会更好(例如,使用包含相同 currID 的所有游戏相关属性的已保存游戏对象)

于 2010-02-22T18:38:07.113 回答