Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pedroalves

problema a mudar de ecra no xna

Recommended Posts

eu estou a fazer um jogo e estou a usar o xna com o neoforce para fazer gui do jogo

o problema é quando uso o função cliente.Login(user, ola, ProcessComplete);

estou a usar este toturial para fazer o meu jogo segue-se o link http://xnagpa.net/xna4rpg.php

  void btnApply_Click(object sender, Controls.EventArgs e)
        {

            string user = txusername.Text.Trim();
            string userPassword = txpassword.Text.Trim();


            if (txusername.Text.Trim().Equals(String.Empty) || txpassword.Text.Trim().Equals(String.Empty))
            {
                TomShane.Neoforce.Controls.MessageBox.Show(NeoManager, TomShane.Neoforce.Controls.MessageBox.MessageBoxType.ERROR, "Username Ou Password is empty", "");

            }
            else
            {
                String ola = Create(userPassword);
                System.Console.WriteLine(ola);
   
               
 
     // StateManager.PushState(GameRef.StartMenuScreen);  
       cliente.Login(user, ola, ProcessComplete); 
                

            }

            ////////////////////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////////////////////    


        }
public void ProcessComplete(Headers header, ErrorCodes Erro)
        {
            System.Diagnostics.Debug.Write(Erro);
            if (header != Headers.Login)
            {
                return;
            }
           
            if (Erro == ErrorCodes.Sucess)
            {

                StateManager.PushState(GameRef.StartMenuScreen);

              
                    
              
            }
           else
            {

                string msg = "";
                switch (Erro)
                {
                    case ErrorCodes.InvalidLogin:
                        System.Console.Write(Erro);
                        msg = "username \\Password is incorrect";
                              break;
                    case ErrorCodes.Error:
                        msg = "Server Is Offline";
                     //   TomShane.Neoforce.Controls.MessageBox.Show(NeoManager, TomShane.Neoforce.Controls.MessageBox.MessageBoxType.ERROR, "" + msg, "");
                        break;


                }
                TomShane.Neoforce.Controls.MessageBox.Show(NeoManager, TomShane.Neoforce.Controls.MessageBox.MessageBoxType.ERROR, "" + msg, "");
              //  StateManager.ChangeState(GameRef.StartMenuScreen);  

            }
           
        }
 

da-me this -me que o servidor esta offline

so quando tenho este codigo no StarmenuScreen

mas se subestiruir o cliente.Login(user, ola, ProcessComplete); pelo StateManager.ChangeState(GameRef.StartMenuScreen); functiona-me

protected override void LoadContent()
        {
            
            base.LoadContent();
            NeoManager = new Manager(Game);
           NeoManager.AutoCreateRenderTarget = true;
           NeoManager.AutoUnfocus = true;
            NeoManager.Initialize();
         //   StateManager.ChangeState(GameRef.StartMenuScreen);
            
            
          InitRes();
   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema voltou-me estes são os erros quando tento mudar de ecra no xna

A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll
'TomShane.Neoforce.Central.exe' (CLR v4.0.30319: TomShane.Neoforce.Central.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_pt_b77a5c561934e089\mscorlib.resources.dll'. Module was built without symbols.
ERROSystem.InvalidOperationException: A operação entre threads não é válida: controlo 'GameForm' acedido a partir de um thread diferente do thread onde foi criado.
   em System.Windows.Forms.Control.get_Handle()
   em System.Windows.Forms.Control.set_Cursor(Cursor value)
   em TomShane.Neoforce.Controls.Manager.SetCursor(Cursor cursor)
   em TomShane.Neoforce.Controls.Manager.SetSkin(Skin skin)
   em TomShane.Neoforce.Controls.Manager.SetSkin(String name)
   em TomShane.Neoforce.Controls.Manager.Initialize()
   em TomShane.Neoforce.Central.Code.server.Initialize() em c:\Users\Pedro\Dropbox\GAMES\TomShane.Neoforce.Controls.XNA4\Neoforce\Source\Central\Code\server.cs:line 283
   em Microsoft.Xna.Framework.Game.GameComponentAdded(Object sender, GameComponentCollectionEventArgs e)
   em Microsoft.Xna.Framework.GameComponentCollection.OnComponentAdded(GameComponentCollectionEventArgs eventArgs)
   em Microsoft.Xna.Framework.GameComponentCollection.InsertItem(Int32 index, IGameComponent item)
   em System.Collections.ObjectModel.Collection`1.Add(T item)
   em XRpgLibrary.GameStateManager.AddState(GameState newState) em c:\Users\Pedro\Dropbox\GAMES\TomShane.Neoforce.Controls.XNA4\Neoforce\Source\XRpgLibrary\GameStateManager.cs:line 81
   em XRpgLibrary.GameStateManager.PushState(GameState newState) em c:\Users\Pedro\Dropbox\GAMES\TomShane.Neoforce.Controls.XNA4\Neoforce\Source\XRpgLibrary\GameStateManager.cs:line 74
   em TomShane.Neoforce.Central.Code.TitleScreen.ProcessComplete(Headers header, ErrorCodes Erro) em c:\Users\Pedro\Dropbox\GAMES\TomShane.Neoforce.Controls.XNA4\Neoforce\Source\Central\Code\TitleScreen.cs:line 249
   em TomShane.Neoforce.Central.Code.LoginClient.process(Object o) em c:\Users\Pedro\Dropbox\GAMES\TomShane.Neoforce.Controls.XNA4\Neoforce\Source\Central\Code\LoginClient.cs:line 57
The thread 0x1e0c has exited with code 259 (0x103).
The thread 0x5d0 has exited with code 259 (0x103).
alguem me pode ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema esta nesta class pois o problema so acontece quando eu chamo a class

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace TomShane.Neoforce.Central.Code
{
    public delegate void ProcessesCompleteDel(Headers header, ErrorCodes errorcode);
    internal struct LoginArgs
    {
        public string Username;
        public string Password;
        public Headers Header;
        public ProcessesCompleteDel Callback;
        public LoginArgs(Headers header, string username, string password, ProcessesCompleteDel callback)
        {
            Username = username;
            Password = password;
            Header = header;
            Callback = callback;

        }
    }

    public class LoginClient
    {
        private byte[] buffer = new byte[512];
        public LoginClient() { }

        public void Login(string username, string password, ProcessesCompleteDel callback)
        {
            LoginArgs args = new LoginArgs(Headers.Login, username, password, callback);
            ThreadPool.QueueUserWorkItem(new WaitCallback(process), args);
        }
        private void process(object o)
        {
            LoginArgs args = (LoginArgs)o;
            Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                
                sck.Connect(serverinfo.Server, serverinfo.port);
                PacketWriter pw = new PacketWriter();
                pw.Write((ushort)args.Header);
                pw.Write(args.Username);
                pw.Write(args.Password);
                byte[] data = pw.GetBytes();
                sck.Send(data, 0, data.Length, SocketFlags.None);
                sck.ReceiveTimeout = 8000;
                sck.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                PacKetReader pr = new PacKetReader(buffer);
                Headers header = (Headers)pr.ReadUInt16();
                ErrorCodes error = (ErrorCodes)pr.ReadUInt16();
             
              //invoke(args.Callback(header, error));
            }
            catch(Exception e)
            {
              System.Console.WriteLine("ERRO"+e);
         
                args.Callback(args.Header, ErrorCodes.Error);
                

            }
            finally
            {
                sck.Close();

            }
        }

    }


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.