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

私がよく理解している場合は、XML レシーバー オブジェクトで playerID を currID に置き換えてみてください。これは、atm で xml 応答をplayerIDvar に入れ、呼び出した後の行にsaveGameas currIDarg が定義されていないためです。

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 のゲーム関連のすべてのプロパティを含むsavedgame オブジェクトを使用するなど)。

于 2010-02-22T18:38:07.113 に答える
0

回答ありがとうございますが、それは問題ではありませんでした。

問題は、sharedObject が変数を真の数値として格納する際に問題があり、すべてを文字列に変換するだけだったときだったと思います。これは、スコアには問題ありませんでしたが、ID は PHP に渡す必要があったためです。

String('number') を使用して ID を文字列に変換して sharedObject に格納し、次に Number('string') を使用して ID を数値に変換し、sharedObject からプルすることで解決しました。

于 2010-03-01T23:18:31.020 に答える