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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 825 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
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010

PS : dans ta class Message, "remove()" ajoute :

object[i] = new Object () !!!
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010

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.