• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 1 voto(i) - 5 media
  • 1
  • 2
  • 3
  • 4
  • 5
Client: Problemi di ricezione?
#1
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
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 ()
Endif
       
Text 0,20,"Numero Avversario: "+str$(Numero#(2))

Return 
[/SPOILER]


Screen:
[SPOILER][Immagine: 85379820.png][/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
 
Rispondi
#2
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
Print "1) Host"
Print "2) Client"
Print
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" Smile
 
Rispondi
#3
complimenti!
 
Rispondi
#4
Hehehe Grazie Smile Comunque anche se posto e mi rispondo da solo un giorno, a qualcun'altro nabbo come me, avere la soluzione subito farà molto comodo... Wink

[SPOILER]E non è finita ancora dobbiamo fare delle prove di gameplay prima di incominciare a mettere gli effetti audio/video etc Wink[/SPOILER]
 
Rispondi
#5
Quel nabbo sarò io xD. Comunque, mi fa piacere che hai risolto.
 
Rispondi
#6
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 Smile
 
Rispondi
  


Vai al forum:


Browsing: 2 Ospite(i)