Avec cette fonction, vous pouvez vous connecter à l'URL spécifiée afin de récupérer des informations sous la forme d'un fichier. Comme il s'agit d'une fonction asynchrone, GameMaker Studio 2 ne bloquera pas en attendant une réponse, mais continuera à fonctionner à moins qu'il ne reçoive des informations de rappel. Cette information sera sous la forme d'une chaîne et déclenchera un événement asynchrone dans n'importe quelle instance qui a un défini dans leurs propriétés d'objet.
Cet événement va générer un "rappel" qui est récupéré par les événements HTTP, auquel cas il va générer un ds_map (plus communément appelé "dictionnaire") qui est exclusif à cet événement et est stocké dans la variable spéciale async_load. Cette ds_map contiendra des valeurs différentes en fonction des données renvoyées, c'est-à-dire que l'événement se déclenchera plusieurs fois à chaque réception de chaque paquet de données afin que vous puissiez afficher une barre de progression, par exemple. La structure générale de la ds_map sera la suivante:
- id: L'ID qui a été renvoyé par la commande. Si vous déclenchez une série de http_ demandes, vous devez alors savoir à laquelle vous obtenez la réponse, et ainsi vous utiliseriez cette valeur pour comparer à la valeur que vous avez stockée lorsque vous avez envoyé la demande pour trouver la bonne.
- status: Renvoie une valeur inférieure à 0 pour une erreur, 0 pour complete et 1 pour la réception de paquets (voir ci-dessous pour plus de détails).
- résultat: Les données reçues (chaîne uniquement).
- url: l' URL complète que vous avez demandée
- http_status: le code d'état brut http (si disponible). Cela renvoie le code d'état Web standard pour la plupart des navigateurs, par exemple: 304 pour "Non modifié" ou 204 pour "Aucun contenu", etc...
Si plusieurs paquets sont retournés à votre jeu, la clé de rappel "status" retournera 1, auquel cas le fichier ds_map aura les clés supplémentaires suivantes:
- "contentLength": C'est la taille du fichier que le serveur web a dit que vous devriez recevoir (peut-être -1 si le serveur ne retourne pas ces données).
- "sizeDownloaded": La taille des données qui ont déjà été téléchargées.
REMARQUE: vous devez être conscient qu'en raison de la protection XSS dans les navigateurs, les demandes et les tentatives de chargement de ressources à partir de plusieurs domaines sont bloquées et peuvent renvoyer des résultats vierges. Veuillez consulter la section sur les problèmes inter-domaines pour plus de détails.
http_get_file(url, local_target);
Argument La description url L'adresse Web du serveur à partir duquel vous souhaitez obtenir le fichier local_target Le répertoire cible de la zone de stockage local pour stocker le fichier
Real
le http_get_file La fonction peut être appelée à partir de n'importe quel événement, et comme elle est asynchrone, le rappel peut être presque instantané ou prendre plusieurs secondes. Appeler la fonction est simple et ressemblerait à ceci:
file = http_get_file("http://www.macsweeneygames.com/downloads/upgrade.zip", "\Downloads\Upgrade.zip");
Le code ci-dessus va demander un fichier à partir de l'URL donnée et le configurer pour être téléchargé dans la zone de stockage local, dans le répertoire "Téléchargements" avec le nom de fichier donné (cela ne doit pas être le même que le nom du fichier source). le async_load L'index de carte sera stocké dans la variable "fichier" afin que vous puissiez vérifier le bon rappel dans l'événement asynchrone, et si le répertoire de sauvegarde n'existe pas, il sera créé. L'événement asynchrone déclenché serait le sous-événement HTTP, et dans ce cas vous auriez quelque chose comme:
if ds_map_find_value(async_load, "id") == file
{
var status = ds_map_find_value(async_load,
"status");
if status == 0
{
var path =
ds_map_find_value(async_load, "result");
var files = zip_unzip(path,
"/NewContent/");
if files > 0
{
global.ExtraContent
= true;
}
}
}
Le code ci-dessus va d'abord vérifier l'identifiant de la carte ds_map qui a été créée, puis vérifier l'état du rappel. Si la valeur est égale à 0 (succès de la signalisation), le résultat du rappel sera alors utilisé avec le zip_unzip() Fonction pour décompresser le fichier téléchargé dans le répertoire donné. Si unzip réussit, une variable globale est définie sur true.