Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [AS3]Gioco multiplayer

  1. #1
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405

    [AS3]Gioco multiplayer

    Sto cercando di creare il gioco degli scacchi multiplayer, come posso realizzare la connessione fra due pc?
    Forum Additive monitora le discussioni più importanti!

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Per creare l'interazione in tempo reale credo che sia necessario affidarsi al Flash Media Server, come si fa ad esempio per una chat, in modo che l'utente possa vedere in tempo reale i cambiamenti effettuati da altri utenti nella stessa sessione

  3. #3
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Ma è a pagamento?

    Comunque, ho visto la classe Socket che permette di inviare anche oggetti, sarebbe perfetto.
    Sto testando il codice di esempio nei livedocs ma non funziona.

    Viene scritto che si connette e che manda la richiesta, ma non viene ricevuto nulla.
    Questo è il codice che sto utilizzando:
    codice:
    package {
        import flash.display.Sprite;
    	import flash.text.*;
    
        public class SocketExample extends Sprite {
        
           private var myIP:String="xxxxxxxxxxxx";
     
            public function SocketExample() {
                var socket:CustomSocket = new CustomSocket(logger,myIP, 80);
            }
        }
    }
    
    import flash.errors.*;
    import flash.events.*;
    import flash.net.Socket;
    import flash.text.*;
    
    class CustomSocket extends Socket {
        private var response:String;
    	private var logger:TextField;
    
        public function CustomSocket(logger:TextField, host:String = null, port:uint = 0) {
            super(host, port);
            this.logger=logger;
    		configureListeners();
        }
    	
    	public function log(data:String):void{
    		logger.appendText(data+"\n");
    	}
    
        private function configureListeners():void {
            addEventListener(Event.CLOSE, closeHandler);
            addEventListener(Event.CONNECT, connectHandler);
            addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
        }
    
        private function writeln(str:String):void {
            str += "\n";
            try {
                writeUTFBytes(str);
            }
            catch(e:IOError) {
                trace(e);
            }
        }
    
        private function sendRequest():void {
            trace("sendRequest");
    		log("sendRequest");
            response = "";
            writeln("GET /");
            flush();
        }
    
        private function readResponse():void {
            var str:String = readUTFBytes(bytesAvailable);
            response += str;
    		log("Response: "+response);
        }
    
        private function closeHandler(event:Event):void {
            trace("closeHandler: " + event);
    		log("closeHandler: " + event.toString());
            trace(response.toString());
        }
    
        private function connectHandler(event:Event):void {
            trace("connectHandler: " + event);
    		log("connectHandler: " + event.toString());
            sendRequest();
        }
    
        private function ioErrorHandler(event:IOErrorEvent):void {
            log("ioErrorHandler: " + event.toString());
    		trace("ioErrorHandler: " + event);
        }
    
        private function securityErrorHandler(event:SecurityErrorEvent):void {
            trace("securityErrorHandler: " + event);
    		log("securityErrorHandler: " + event.toString());
        }
    
        private function socketDataHandler(event:ProgressEvent):void {
            trace("socketDataHandler: " + event);
    		log("socketDataHandler: " + event.toString());
            readResponse();
        }
    }
    logger non è atro che un TextField sullo stage per visualizzare i trace.

    Lo publicco, e avvio il file .swf(due volte), ma entrambi si connettono senza ricevere nulla.
    In teoria quando apro il secondo il primo dovrebbe ricevere una stringa.
    Se cambio porta non si connette, da un errore.
    Forum Additive monitora le discussioni più importanti!

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Flash Media Server è a pagamento per i provider che lo installano, che non son tanti
    tu fai un normale abbonamento ad uno spazio che lo prevede, ma il costo è decisamente più alto rispetto a quello di un qualsiasi spazio web.

    La classe Socket l'ho testata per l'invio di mail da Flash via SMTP e funziona abbastanza bene, ma non so se vada bene per creare una connessione persistente tra due pc che richiamano lo stesso swf, volendo potremo testarla insieme anche se ci sarebbe da capire prima il meccanismo di scambio dati che dovrebbe stare alla base di questa possibilità

  5. #5
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Te come pensavi di fare?
    Penso però che una volta online, si debba tenere un swf in ascolto sul server che mi da il dominio.
    Questo non è possibile...
    Forum Additive monitora le discussioni più importanti!

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    >> Te come pensavi di fare?

    In realtà non mi sono posto il problema ma proverei a cercare su internet se qualcun ha affrontato qualcosa del tipo "Chat+Socket", perchè credo che il principio sia identico

  7. #7
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Ho controllato, ho visto anche esempi di chat usando applet java e socket.
    Il codice è praticamente identico a quello per as, si collegano ad un server che smista il traffico, il problema è che io come faccio a fare il server?
    Cioè lo saprei fare, ma mica posso tenerlo sulla mia macchina, lo devo mettere nel dominio anche quello e non posso...
    Altrimenti mi tocca fare da server con il mio pc, cosa fuori discussione direi visto che dovrà essere un gioco fruibile online.
    Forum Additive monitora le discussioni più importanti!

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    scusa ma non ho capito, non puoi usare un server qualsiasi, e nella fattispecie quello che dovrebbe contenere il tuo gioco online?

  9. #9
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Si ma mi serve un'applicazione alla quale connettermi, altrimenti come faccio?

    Io devo mandare i dati ad una applicazione che fa da server, la quale deve essere scritta in flash(o al limite in java non è un problema), che a sua volta manda il messaggio al destinatario.

    Per non usare un'applicazione come server dovrei utilizzare php e un database, ma poi non un collegamento in realtime, visto che per leggere un dato devo fare delle query al db finchè non trovo qualcosa di "nuovo".

    Il gioco degli scacchi come minimo neccessità di una sincronizzazzione per il tempo che scorre.
    Forum Additive monitora le discussioni più importanti!

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    capisco quello che intendi, ma va oltre quel che conosco dei socket, dovrei vedere meglio la cosa per poterti dare concretamente una mano nel problema
    chiaramente tenendo per buono il fatto che Socket vada bene per quello che devi fare tu

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.