Organiser un script compliqué (ou la communication entre classes)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 924 fois - Téléchargée 30 fois

Contenu du snippet

Si comme moi vous confondez ActionScript et C et que vous utilisez des classes (nouveautée de flash 7), voici un petit code qui permettra d'éviter d'avoir par exemple une classe contenant une variable qui pointe vers l'occurence d'une autre classe (afin de la modifier par exemple) et aussi d'éviter d'écrire les lignes de code supplémentaires (toujours pour la raison citée au dessus) : voici un code qui permet de gérer des messages...

Par exemple, si vous avez une classe Serveur et une classe Utilisateur (pour un chat)

Il suffit de mettre dans l'initialisation de la classe Utilisateur le petit code :
Messages.Add(this);

Et ensuite quand par exemple on recoit un message privé (dans la classe Serveur évidemment), il suffit de mettre :

Messages.Send("MessagePrivéReçu", new Array("le message", "nom de l'utilisateur"));

et de l'autre côté dans la classe Utilisateur :

function onMessage(mess, param) {
if (mess == "MessagePrivéReçu" && param[1] == this.name) { // on regarde si c'est la bonne occurence
this.ouvrirMessagePrivé(param[0]); // j'imagine une fonction qui ouvrirait une fenêtre de message privé avec comme paramètre le message
}
}

Source / Exemple :


class Messages {
	static var objects:Array;
	static var count:Number;
	
	static function Initialise() {
		objects = new Array();
		count = 0;
	}
	
	static function Add(obj:Object) {
		objects[count] = obj;
		count++;
	}
	
	static function Remove(obj:Object) {
		for(var i = 0; i < count; i++) {
			if (objects[i] == obj) {
				objects[i] = new Object();
			}
		}
	}
	
	static function Send(mess:String, param:Array) {
		var retour = null;
		for(var i = 0; i < count; i++) {
			if (retour == null || retour == undefined)
				retour = objects[i].onMessage(mess, param);
			else
				objects[i].onMessage(mess, param);
		}		
		return retour;
	}
	
	static function SendNoP(mess:String) {
		return Send(mess, new Array());
	}
}

Conclusion :


J'ai fait ce code parce que je suis sur un grand projet (un mmorpg) et que mon script commencait à devenir vraiment brouillon, avec ça c'est beaucoup plus organisé

A voir également

Ajouter un commentaire Commentaires
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
30 juil. 2004 à 12:06
oui c'est normal le object[i] = new Object()
comme ca l'objet que l'on veut enlever (qui est dans object[i]) est remplacé dans le tableau par un objet quelconque

si je fais delete object[i]; ca va enlever complètement l'objet (pas seulement du tableau)

évidemment je pourrais faire un script qui déplace tous les éléments du tableau qui suivent d'un rang en arrière pour enlever l'objet du tableau mais je préfère faire simple
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
30 juil. 2004 à 01:36
PS : dans ta class Message, "remove()" ajoute :

object[i] = new Object () !!!
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
30 juil. 2004 à 01:34
Je crois que tu as moyen de savoir qui appelle (le caller) je crois.. Donc dans vérifier la Class (instanceof) et de pouvoir continuer ou pas...

Enfin je crois...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.