neoaxis fr Index du Forum

neoaxis fr
Forum pour la communauté Française NeoAxis. NeoAxis 3D Engine est un environnement de développement intégré libre qui permet à des projets de tous types et la complexité. L'environnement est conçu pour être utilisé dans des domaines tels que les jeux.

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Menu de sélection de personnage

 
Poster un nouveau sujet   Répondre au sujet    neoaxis fr Index du Forum -> Général -> Tutoriels et articles de la Communauté
Sujet précédent :: Sujet suivant  
Auteur Message
kalicem
Administrateur

Hors ligne

Inscrit le: 24 Mai 2014
Messages: 15

MessagePosté le: Dim 14 Déc - 07:35 (2014)    Sujet du message: Menu de sélection de personnage Répondre en citant

Ceci est un tutoriel sur la façon de créer une sélection de classe simple pour le multijoueur. Cela ne va pas être très joli, mais cela va fonctionner.   

Cela a été fait avec Visual studio C # 2010 express et la version limitée de  Neoaxis 2,02.  
 
 
Je pense que la version 1.32 alternatif pourrait être suffisant, mais vous devez avoir accès au code client/serveur.   
 
 
  
  
Ce tutoriel ne fonctionne que si vous utilisez le serveur dédié. Jouer et héberger ne fonctionne pas. Je pourrais résoudre ce problème plus tard.   
 
 
  
  
Premièrement aller de l'avant et modifier le MultiplayerLoginWindow gui dans l'éditeur de ressources.  Ajouter un nouveau DefaultListBox gui et lui donner le nom "classes"   
 
 
 
 
 
Ensuite, ouvrez MultiplayerLoginwindows.cs dans Visual Studio.   
Au début de la classe ajoutait une nouvelle variable, qui va tenir notre liste des classes.  
 
 
  
Code:
Control window;
EditBox editBoxUserName;
EditBox editBoxConnectTo;
Button buttonCreateServer;
Button buttonConnect;
ListBox classes; //ici 




 
 
Au bas de la méthode OnAttach() nous prenons notre zone de liste à partir de l'interface graphique et ajoutons quelques éléments window.controls. Girl et Robot.  
 
 
  
Code:
classes = (ListBox)window.Controls["classes"];
classes.Items.Add("Girl");
classes.Items.Add("Robot");


SetInfo("", false);






 
 
À ce stade, vous pouvez compiler et exécuter votre jeu pour tester le lobby multijoueur. 
Il devrait y avoir une liste  maintenant avec Girl et Robot.  



 
 
Maintenant, nous devons transférer notre classe sélectionnée (Girl ou Robot) sur le serveur.  
 
 
Trouver le morceau de code à l'intérieur de la méthode Connect_Click() où le client commence BegingConnect.  
 
 
Nous allons ajouter une nouvelle variable à l'appel BeginConnect qui enverra notre classe sélectionnez avec la connexion.     
 
 
  
Code:
string classtype = ((string)classes.SelectedItem) == null ? "Girl": (string)classes.SelectedItem; 
//Obtenez la classe de la liste GUI ou si aucun n'a été choisie aller avec "Girl"

if( !client.BeginConnect( connectToAddress, port, EngineVersionInformation.Version,
userName, password, out error, classtype ) ) //nous avons ajouté notre classtype comme une nouvelle variable pour BeginConnect
{
Log.Error( error );
DisposeClient();
return;





Il y aura une erreur nous disant que BeginConnect ne prend pas plusieurs variables. 
 
 
C'est bon, puisque nous allons le changer.  
 
 
Dans NetworkClient.cs changer le BeginConnect() pour accepter encore une variable "string classtype"     
 
 
  
  
Code:
public bool BeginConnect( string host, int port, string clientVersion, string loginName,
string password, string uid, out string error, string classtype)




 
 
et à la fin du procédé classtype ajouter au message qui est envoyé au serveur  
 
 
  
Code:
NetOutgoingMessage message = client.CreateMessage();
message.Write( clientVersion );
message.Write( loginName );
message.Write( password );
message.Write(uid);
message.Write(classtype); //ici 






 Ajoutez une nouvelle variable dans Networkclient.cs pour garder notre classtype  
 
 
  
Code:
public abstract class NetworkClient : NetworkNode
{
string loginName;
string remoteServerName = "";
string classtype = ""; //ici



 Maintenant allez à la classe du serveur pour comprendre que faire quand nous recevons des informations. 
Ouvrez NetworkServer.cs et la méthode OnUpdate() 
 
 
Code:
//recevoir le nom de connexion et mot de passe
string clientVersion = "";
string loginName = "";
string password = "";
string uid = "";
string classtype = ""; //nnouvelle variable de classe

List<string> remoteServices = new List<string>();
try
{
clientVersion = incomingMessage.ReadString();
loginName = incomingMessage.ReadString();
password = incomingMessage.ReadString();
uid = incomingMessage.ReadString();
classtype = incomingMessage.ReadString(); //Lisez notre sélection de classe dans message du client 




 
 
A l'intérieur de cette même méthode le serveur crée un NetworkNode et passe loginname et uid à ce nœud.
 Nous ajoutons notre "classtype" au constructeur  
 
 
  
Code:
connectedNode = new ConnectedNode( this, incomingMessage.SenderConnection, loginName, uid, classtype ); 




 
 
Maintenant, nous obtenons une erreur disant que ConnectedNode ne prend pas cinq paramètres. 
Ajoutons le dernier. Sélectionnez le "ConnectedNode» et clic droit. 
Sélectionnez l'option "Aller à la définition" et vous allez directement à la méthode que nous devons modifier.
Ajouter une nouvelle variable pour notre classe et Et une propriété publique appelée PlayerClass  
 
 
  
Code:
public sealed class ConnectedNode
{
NetworkNode owner;
NetConnection connection;
internal NetworkConnectionStatuses status = NetworkConnectionStatuses.Disconnected;
StatisticsData statistics;
string loginName;
string classtype; //ici




 
 
Changer le constructeur pour accepter notre variable de classe   
 
 
  
Code:
internal ConnectedNode( NetworkNode owner, NetConnection connection, string loginName ,string uid, string classtype)
{
this.owner = owner;
this.connection = connection;
this.loginName = loginName;
this.uid = uid;
this.classtype = classtype; //ici
statistics = new StatisticsData( this );

public string PlayerClass //cette nouvelle propriété ici

get { return this.classtype; } 
}





 
 
 Recompiler Networking et toutes les autres parties de la solution. 
Si vous obtenez des erreurs disant que BeginConnect ne prend pas x paramètres juste aller de l'avant 
et fixer tous ceux en ajoutant une chaîne vide "" comme dernier paramètre.
Dans le chat-exemple, il n'a pas d'importance si votre classe est vide car elle n'est pas utilisé.  
 
 
 
  
  
On y est presque. Juste un changement dans GameWorld.cs et nous avons une sélection de classe fonctionnelle pour le multijoueur    
 
 
  
Dans GameWorld.cs dans la méthode ServerOrSingle_CreatePlayerUnit () modifient juste le début de la méthode comme ceci  
    
 
 
  
Code:
string unitTypeName = player.User.ConnectedNode.PlayerClass as string;

if (unitTypeName != null && !player.Bot)
{

if( GameMap.Instance.PlayerUnitType != null )
unitTypeName = GameMap.Instance.PlayerUnitType.Name;

/*else
unitTypeName = "Girl";//"Rabbit";*/

}
else


unitTypeName = player.Name; 




Et c'est tout! Recompiler et démarrer le serveur dédié (+ créer et charger une carte).
Puis lancer Game.exe et connectez-vous   


 
 


 
 
  


Revenir en haut
Publicité






MessagePosté le: Dim 14 Déc - 07:35 (2014)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    neoaxis fr Index du Forum -> Général -> Tutoriels et articles de la Communauté Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com