2010-02-14 71 views
0

我正在创建一个使用sharedObject来保存每个玩家本地进度的游戏。它还连接到中央数据库以创建在线记分牌。当用户首次插入分数时,唯一ID将从数据库发送到swf并作为sharedObject数据的一部分进行保存。Flash AS2 - 帮助将使用PHP从mySQL导入的变量保存到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); 
?> 

回答

0

如果我米理解好了,你shuld尝试通过currID在XML接收对象,以取代playerID因为atm你把xml回复放在一个playerID var和你后面的行请拨saveGamecurrID作为arg,这是未定义的。

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"); 

} 

你应该使用含有savedgame对象正确的内容类型添加到您的PHP页面

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

最后,我认为这将是更好地存储在不同方式的数据(为例所有与游戏相关的属性为相同的currID)

0

感谢您的答案,但那不是问题。

我认为问题是,当共享对象存在问题时,将变量存储为真实数字,并且只是将所有内容都转换为字符串,这对分数很好,但对于Id而言不是必须传递给PHP 。

通过使用String('number')将ID转换为要存储在sharedObject中的字符串,然后Number('string')将其从SharedObject拉出时转换回数字来解决此问题。