Client: Problemi di ricezione? - Versione stampabile +- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi) +-- Forum: Altri Programmi per la Creazione di Videogames (https://www.making-videogames.net/giochi/Forum-Altri-Programmi-per-la-Creazione-di-Videogames) +--- Forum: Darkbasic Pro, DarkGDK (https://www.making-videogames.net/giochi/Forum-Darkbasic-Pro-DarkGDK) +--- Discussione: Client: Problemi di ricezione? (/thread-Client-Problemi-di-ricezione) |
Client: Problemi di ricezione? - Jonathan Archer - 16-09-2010 Raga ho incontrato un bel problema quando stavo lavorando insieme a Killerz al famoso "gioco online" che abbiamo in progetto ma accade una cosa stranissima durante i test. Dato la mia inesperienza ho provato a fare un semplice scambio di numeri word per controllare se riuscivo a fare comunicare host e client. Il tutto consiste in un comando DIM Numero(2). Il giocatore in questione aumenta di uno Numero(1) mentre attente il numero inviatogli dall'altro giocatore che sarà memorizzato come Numero(2). Il verdetto? L'Host riesce a mandare e ricevere senza problemi mentre il Client invia senza problemi ma non riceve nulla dall'host. Forse mi sfugge qualcosa, ho controllato e controllato ma non mi spiego xkè condividendo lo stesso codice uno funzioni e l'altro no. Pensavo fosse dovuto che alcuni comando multisync possono essere usati solo dall'host ma non è questo il caso. Codice: [SPOILER] Codice PHP: REM MANDAMIAPOSIZIONE Screen: [SPOILER][/SPOILER] Note: Tutte e due i comandi vengono utilizzati tramite Gosub e Return e vengono utilizzati in ordine: Prima l'invio dei propri dati e poi si controlla i messaggi RE: Client: Problemi di ricezione? - Jonathan Archer - 18-09-2010 Finamente dopo 5 giorni di stress sono riuscito a capire il problema! Dato il vecchio codice: [SPOILER]Set Window title "Star Wars Multiplayer" Gosub ComandiOnline REM IMPOSTAZIONI INIZIALI Sync on : autocam off : set camera range 1,200000 REM ARRAY Dim TimerColpi(2,19) REM SPAZIO CIRCOSTANTE Load image "Texture/Stelle.png",9999 Make object cube 9999,-200000 Texture object 9999,9999 REM X-WING If ModelloTu$="Modelli/X-Wing/X-Wing.x"=1 REM TU SEI L'X-WING Load object ModelloTu$,1 Yrotate object 1,90 Fix object pivot 1 REM IL CACCIA TIE é IL NEMICO Load object ModelloNemico$,20 Position object 20,0,0,7000 Yrotate object 20,180 Position object 20,0,0,6700 else REM TU SEI IL CACCIA TIE Load object ModelloTu$,1 Position object 1,0,0,7000 Yrotate object 1,180 Position camera 0,0,6700 : REM PERCHé IL MODELLO POI SI ADEGUA ALLA POSIZIONE DELLA CINEPRESA YRotate Camera 180 REM L'X-WING é IL TUO NEMICO Load object ModelloNemico$,20 Yrotate object 20,90 Fix object pivot 20 Endif ghost object on 1 RoolXWing#=0.3 PitchXWing#=0.2 REM CAMERA 1 DI PROVA make camera 1 position camera 1,-600,0,6700 point camera 1,object position x(20),object position y(20),object position z(20) set camera view 1,0,0,300,300 Dim Numero(2) REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- do Risultato = NET CONNECTED () Text 0,30,"Connesso? "+str$(Risultato) REM COMANDI Gosub COMANDARETU Gosub ALLINEATUCONCINEPRESA REM AUTOMATICI Gosub MUOVILASERTU Gosub CANCELLALASERTU REM MANDA LA MIA POSIZIONE ALL'HOST/CLIENT Gosub MANDAMIAPOSIZIONE Gosub RICEVIPOSIZIONENEMICO REM SISTEMARE LE VARIABILI If Temporicarica=0=0 then dec temporicarica text 0,0,str$(temporicarica) sync Loop REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- REM COMANDARE IL TUO MODELLO COMANDARETU: if upkey()=1 then pitch camera up PitchXWing# if downkey()=1 then pitch camera down PitchXWing# if leftkey()=1 then roll camera left RoolXWing# if rightkey()=1 then roll camera right RoolXWing# if Inkey$()="q" then turn camera left RoolXWing# if Inkey$()="e" then turn camera right RoolXWing# if inkey$()="w" then move camera 3 if spacekey()=1 If temporicarica=0 x=0 Repeat inc x Until object exist(x)=0 If x=20=0 make object box x,10,0,100 color object x,rgb (255,0,0) position object x,object position x(1),object position y(1),object position z(1) xrotate object x,object angle x(1) yrotate object x,object angle y(1) zrotate object x,object angle z(1) Temporicarica=200 Timercolpi(1,x)=5000 Endif Endif Endif Return REM ALLINEALA TUA CINEPRESA CON IL MODELLO ALLINEATUCONCINEPRESA: Position object 1,camera position x(),camera position y(),camera position z() Xrotate object 1,Camera angle x() Yrotate object 1,Camera angle y() Zrotate object 1,Camera angle z() Return REM MUOVI LASER TUOI MUOVILASERTU: x=1 Repeat inc x if object exist(x)=1 then move object x,7 Until x=19 Return REM CANCELLA I TUOI LASER CANCELLALASERTU: x=1 Repeat inc x if timerColpi(1,x)=0 If object exist(x)=1 then delete object x else dec timerColpi(1,x) Endif Until x=19 Return REM MANDAMIAPOSIZIONE MANDAMIAPOSIZIONE: inc Numero(1) NET PUT WORD (Numero(1)) Net Send Text 0,10,"Numero Tuo: "+str$(Numero(1)) Return REM CONTROLLA SE IL NEMICO TI HA MANDATO LA SUA POSIZIONE RICEVIPOSIZIONENEMICO: Risultato = net get message() If Risultato=1 Numero(2) = NET GET WORD() Text 0,20,"Numero Avversario: "+str$(Numero(2)) Text 0,40,"Ricevi? 1" Endif Return REM COMANDI ONLINE ComandiOnline: Rem Controlla Windows Firewall if net firewall enabled() print "Windows Firewall e' attivo!" if net firewall application enabled(appname$()) Print "Tuttavia e' gia' nella lista delle eccezioni" else Print "E non e' nella lista delle eccezioni" endif else print "Windows Firewall e' disattivato!" endif Print "Premere un tasto per continuare..." Wait key Rem Menu di scelta HostClient: cls Rem Scegli host/client Print "Star Wars Multiplayer:" Print "1) Host" Print "2) Client" Print "Inserisci un numero>" Input a Rem Hosti if a=1 Set Window title "Ora sei Host!" cls Print "Inserisci il tuo ip> " Input Ip$ Risultato = Net Host (2,Ip$) If Risultato=0 Print "Server Fallito. Premi un tasto..." wait key end Endif ModelloTu$="Modelli/X-Wing/X-Wing.x" ModelloNemico$="Modelli/Caccia Tie/Caccia Tie.x" Print "In attesa di un giocatore..." Repeat Risultato = Net Player joined() Until Risultato=1 cls Center text (SCREEN WIDTH()/2),(SCREEN HEIGHT()/2),"Caricamento..." wait 50 Return Endif Rem Partecipi if a=2 Set Window title "Ora sei Client!" cls Input "Inserisci l'ip dell'host> ",Ip$ Risultato = Net Connect (Ip$) If Risultato=1 cls Center text (SCREEN WIDTH()/2),(SCREEN HEIGHT()/2),"Caricamento..." wait 50 else Print "Non sei riuscito a partecipare. Premi un tasto..." wait key end Endif ModelloTu$="Modelli/Caccia Tie/Caccia Tie.x" ModelloNemico$="Modelli/X-Wing/X-Wing.x" Return Endif rem Sbagli numero if a=1=0 and a=2=0 then goto HostClient[/SPOILER] Ebbene la soluzione sta nel codice in grassetto. Xkè ho pensato che nel protocollo TCP/IP L'host non è un giocatore qualunque ma è colui che gestisce e invia i dati a tutti i giocatori. Avendo visto il comando "Net Send All" che è un comando "Server Only" sono riuscito a capire e a confermare i miei sospetti! Il Codice va sostituito in questo modo. [SPOILER]If ModelloTu$="Modelli/X-Wing/X-Wing.x" Net Send All else Net Send Endif[/SPOILER] Perchè usare If? Perchè "Net send All" lo può utilizzare solo l'Host e il client non può utilizzarlo! Viceversa per "Net Send" RE: Client: Problemi di ricezione? - KillerZ - 18-09-2010 complimenti! RE: Client: Problemi di ricezione? - Jonathan Archer - 18-09-2010 Hehehe Grazie Comunque anche se posto e mi rispondo da solo un giorno, a qualcun'altro nabbo come me, avere la soluzione subito farà molto comodo... [SPOILER]E non è finita ancora dobbiamo fare delle prove di gameplay prima di incominciare a mettere gli effetti audio/video etc [/SPOILER] RE: Client: Problemi di ricezione? - Riddick - 19-09-2010 Quel nabbo sarò io xD. Comunque, mi fa piacere che hai risolto. RE: Client: Problemi di ricezione? - Jonathan Archer - 19-09-2010 Morale della favola: Non abbandonare mai! Sinceramente la mattina stessa che ho scoperto il "modo" avevo intenzione di abbandonare mentre invece di pomeriggio ho trovato la soluzione |