Flash AS2 - Помогите сохранить переменную, импортированную из mySQL с помощью PHP, в sharedObject? - PullRequest
0 голосов
/ 14 февраля 2010

Я создаю игру, которая использует sharedObject для сохранения прогресса каждого игрока локально. Он также подключается к центральной базе данных для создания онлайн-табло. Когда пользователь впервые вставляет оценку, уникальный идентификатор отправляется из базы данных в SWF и сохраняется как часть данных sharedObject.

Абсолютно все работает, и идентификатор сохраняется в sharedObject, однако при перезапуске swf идентификатор не загружается (даже если другие переменные, сохраненные в sharedObject, загружаются).

Я думаю, что это может быть связано с тем, как он отформатирован, возможно, с XML, но я не уверен.

FLASH-КОД

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

Ответы [ 2 ]

0 голосов
/ 02 марта 2010

Спасибо за ответ, но это не проблема.

Я думаю, что проблема заключалась в том, что когда sharedObject испытывал проблемы с сохранением переменной как истинного числа и просто преобразовывал все в строки, это было хорошо для оценки, но не для идентификатора, так как это должно было быть передано в PHP.

Решено с помощью String ('число') для преобразования идентификатора в строку, которая будет сохранена в sharedObject, а затем Number ('string') для преобразования его обратно в число при извлечении его из sharedObject.

0 голосов
/ 22 февраля 2010

Если я хорошо понимаю, вы должны попытаться заменить playerID на currID в вашем объекте XML-получателя, потому что atm вы помещаете xml-ответ в playerID var и строку после вызова saveGame с currID в качестве аргумента который не определен.

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)

...