Я создал игру с использованием Actionscript 3. В этой игре я сохраняю результаты в онлайн-базе данных MySQL. Я получаю доступ к этой базе данных из моей флеш-игры, вызывая php-скрипты, написанные мной с использованием класса URLLoader.
Я загружаю все оценки игроков, чтобы их можно было просмотреть в начале игры, а затем сохраняю их по мере прохождения уровней.
Моя проблема в том, что как только я сохраняю счет, а затем перезагружаю все результаты в главном меню, я получаю результаты, которые были загружены в начале игры, и ни один из них не обновлялся. Я могу просматривать обновленные результаты только после перезапуска игры.
Вот код actioncript для загрузки моего счета. Вызывается один раз, когда инициализируется главное меню.
getScoresRequest = new URLRequest("http://localhost/GetScores.php");
getScoresRequest.method = URLRequestMethod.GET;
getScoresLoader = new URLLoader();
getScoresVariables = new URLVariables();
getScoresVariables.email = Globals.email;
getScoresRequest.data = getScoresVariables;
getScoresLoader.dataFormat = URLLoaderDataFormat.TEXT;
getScoresLoader.addEventListener(Event.COMPLETE, completeHandler);
getScoresLoader.load(getScoresRequest);
private function completeHandler(e:Event):void
{
var xmlData:XML = new XML(e.target.data);
}
Затем я использую эти xmlData для отображения своих результатов.
Вот мой php для загрузки моих очков:
<?php
$email = $_REQUEST["email"];
$dbh=mysql_connect ("**********", "*****", "*******")
or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("*******",$dbh);
$query = "SELECT * FROM Scores WHERE email = '$email'";
$result = mysql_query($query, $dbh);
$xml_output = "<Scores>\n";
for($x = 0; $x < mysql_num_rows($result); $x++)
{
$row = mysql_fetch_assoc($result);
$xml_output .= "\t<Entry>\n";
$xml_output .= "\t\t<Level>" . $row['level'] . "</Level>\n";
$xml_output .= "\t\t<Score>" . $row['score'] . "</Score>\n";
$xml_output .= "\t</Entry>\n";
}
$xml_output .= "</Scores>";
echo $xml_output;
mysql_close($dbh);
?>
Мой сценарий действий для сохранения результатов очень похож на загруженный, за исключением того, что loader.dataFormat имеет значение «Переменные» вместо «Текст». Если кто-нибудь захочет, чтобы я опубликовал это, я могу это сделать.
Вот php для сохранения:
<?php
$email = $_REQUEST["email"];
$level = $_REQUEST["level"];
$score = $_REQUEST["score"];
$dbh=mysql_connect ("******", "********", "********")
or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("********",$dbh);
$query = "SELECT * FROM Scores WHERE email = '$email' AND level = '$level'";
$result = mysql_query($query, $dbh);
$row = mysql_num_rows($result);
$returnVars = array();
if($row > 0)
{
for($x = 0; $x < 1; $x++)
{
$currentRow = mysql_fetch_assoc($result);
if((int)$score > (int)$currentRow['score'])
{
$returnVars['prevHighScore'] = $currentRow['score'];
$updateQuery = "UPDATE Scores SET score = '$score' WHERE email = '$email' AND level = '$level'";
$result = mysql_query($updateQuery, $dbh);
$returnVars['newHighScore'] = $score;
$returnVars['type'] = "Score Updated";
}
else
{
$returnVars['prevHighScore'] = $currentRow['score'];
$returnVars['newHighScore'] = '0';
$returnVars['type'] = "Score Not Updated";
}
}
}
else
{
$insertQuery = "INSERT INTO Scores(email, level, score) VALUES('$email', '$level', $score)";
$result = mysql_query($insertQuery, $dbh);
$returnVars['newHighScore'] = $score;
$returnVars['prevHighScore'] = "0";
}
$returnVars['rows'] = $row;
$returnString = http_build_query($returnVars);
echo $returnString ;
mysql_close($dbh);
?>
Моя база данных определенно обновляется, так как я могу просматривать содержимое.
Если у кого-то есть какие-либо идеи, это будет с благодарностью.