2010-02-14 5 views
0

Je crée un jeu qui utilise sharedObject pour enregistrer la progression de chaque joueur localement. Il se connecte également à une base de données centrale pour créer un tableau de bord en ligne. Lorsqu'un utilisateur insère une note pour la première fois, un identifiant unique est envoyé hors de la base de données vers le fichier swf et enregistré dans le cadre des données de sharedObject.Flash AS2 - Aide à la sauvegarde d'une variable importée depuis mySQL en utilisant PHP dans sharedObject?

Absolument tout fonctionne et l'ID est enregistré dans l'objet sharedObject, mais lorsque le swf est redémarré, l'ID ne se charge pas (même si les autres variables enregistrées dans l'objet sharedObject se chargent).

Je pense que cela peut être en rapport avec la façon dont il est formaté, peut-être avec le XML, mais je ne suis pas sûr.

FLASH CODE

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 CODE

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

Répondre

0

Si je suis comprendre bien, vous shuld essayez de remplacer playerID par currId dans votre objet récepteur XML car atm vous mettez la réponse xml dans un var playerID et la ligne après vous appelez saveGame avec currID comme argument qui n'est pas défini.

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

} 

Vous devez ajouter le type de contenu approprié à votre page php

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

Enfin, je pense qu'il serait préférable de stocker vos données d'une manière différente (pour exemple à l'aide d'un objet savedgame qui contient toutes les propriétés liées au jeu pour un même currID)

0

Merci pour la réponse, mais ce n'était pas le problème. Je pense que le problème était que lorsque sharedObject rencontrait des problèmes pour stocker des variables sous forme de nombres réels et convertissait tout en chaînes, ce qui était bien pour le score mais pas pour l'Id car cela devait être transmis au PHP .

Résolu en utilisant String ('nombre') pour convertir l'ID en une chaîne à stocker dans sharedObject, puis Number ('chaîne') pour le reconvertir en un nombre lorsque vous le tirez de l'objet sharedObject.