Networking Question

Vēlies radīt spēli, bet nezini ar ko sākt? Sperot pirmos soļus, vari meklēt padomu šeit
Message
Author
bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: Networking Question

#41 Post by bubu » 23 Jan 2012, 21:41

Nesapratu. Ko tas nozīmē, ka pakas izmērs ir 2 biti?
Pakas izmērs tiek rēķināts automātiski no min/max/prec mainīgajiem.

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: Networking Question

#42 Post by CodeWolf » 23 Jan 2012, 22:37

nu kā tu rakstiji ka lai iegūtu lielāku vērtību man pie 14 bija japieskaita 1bits klat..
pirmstam man limits uz (14) bija =64 tagad uz (15) kautkadi 230..
sanāk ka es bitcnt varu skaitīt klāt cik vērības gribu un tas nepalielinās sūtāmās paketes izmērus.. ?

Code: Select all

bsOut.Write((char*)buffer,BBC);
BBC tak nosaka pakas izmēru..
//OpenGL

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: Networking Question

#43 Post by CodeWolf » 28 Jan 2012, 01:33

Atvainojos par dubultpostu.. Radās neliela problēma kuru īsti nezinu kā novērst tāpēc nodomāju ka kāds no jums zinās kā ko tādu atrisināt..
Visu itkā sataisiju...vismaz pa daļām tagad meiģinu visu smuki sastiķēt kopā ar klasēm.. lai nevalda tāds bardaks kā iepriekš..
entie bitu pārveidotāji untt..
Lieta tāda ka RakNet izmanto case funkciju priekš sūtijumiem .. un man paku rakstītājs/lasītājs atrodas citā failā.. lai varētu pēc nepieciešamības izmantot viņus ... //dPacket * Paka0 = new dPacket(); problēma tajā visā ir tāda ,ka Send funkcijām jāatrodas tur pat kur write un
Ziņu id.. priekš rakstīšanas nebija problēmu jo Ziņu ID (jeb GameMessageIDs) ir viegli definēt..

Code: Select all

void dPacket::write( float  value, float min,  float max,  float precision,int GameMessageIDs)
//.....
//......
bsOut.Write((RakNet::MessageID)GameMessageIDs);
bsOut.Write(value);  //(char*)buffer,BBC
peer->Send(&bsOut,HIGH_PRIORITY,RELIABLE_ORDERED,0,packet->systemAddress,false);
Bet nolasīšanai ir jaizmanto case..
kā lai es tagad sadalu
case uz abām pusēm..?
jo main failā izmantoju visu struktūru..

Code: Select all

while (1)
	{
		for (packet=peer->Receive(); packet; peer->DeallocatePacket(packet), packet=peer->Receive())
		{
			switch (packet->data[0])
				{
				case ID_REMOTE_DISCONNECTION_NOTIFICATION:
					printf("Another client has disconnected.\n");
					break;
				case ID_REMOTE_CONNECTION_LOST:
					printf("Another client has lost the connection.\n");
					break;
				case ID_REMOTE_NEW_INCOMING_CONNECTION:
					printf("Another client has connected.\n");
					break;
				case ID_CONNECTION_REQUEST_ACCEPTED:
					printf("Our connection request has been accepted.\n");
					break;	
//un tā tālak..				
un iekš dPacket::read

Code: Select all

float dPacket::read(float min, float max, float precision,int GameMessageIDs)
//...........
switch(packet->data[0])
		{
	case GameMessageIDs:
	{
	
    int bitcnt = (Log2((max - min) / precision))+1;
	//....
	int tmp;
	bsIn.Read(tmp);
	bufPos=0;

	printf("----------------------------------------------\n");
	printf("Dati -> Iesutne\nBBC = -- \nTMP = %i \nBitcnt = %i \n",tmp,bitcnt);
    return min + tmp * precision;
	
	}
	break;
	default:
	printf("Message with identifier %i has arrived.\n", packet->data[0]);
	break;
kā jau minēju visam smuki jāatrodas iekš case un kopā ja tas tā nav tad funkcijas nestrādā..
ja vēlāk iekš maina kur man ir nepieciešams .. rakstīt lasīt pakas ievietoju kodu ārpus case tas nestrādā
ja iekš.. + vajadzīgās sadaļas tad viņš rāda erroru... (vismz kko lidzigu tam ) -
1 #IND00
Man nav īsti nojausmas kā lai šo vietu sataisa/apiet..
+Veidoju dubultpostu jo domāju ka labojot veco neviens to neizlasīs.. :)
//OpenGL

snake5
Posts: 358
Joined: 07 Dec 2010, 03:54
Contact:

Re: Networking Question

#44 Post by snake5 » 28 Jan 2012, 09:09

http://stackoverflow.com/questions/3479 ... 1-ind-mean
Some operations don't make mathematical sense, such as taking the square root of a negative number. (Yes, this operation makes sense in the context of complex numbers, but a double represents a real number and so there is no double to represent the result.) The same is true for logarithms of negative numbers. Both sqrt(-1.0) and log(-1.0) would return a NaN, the generic term for a "number" that is "not a number". Windows displays a NaN as -1.#IND ("IND" for "indeterminate") while Linux displays nan. Other operations that would return a NaN include 0/0, 0*∞, and ∞/∞. See the sample code below for examples.
Mazāk par minūti prasīja atrast - attiecīgi nav problēma, kuras dēļ pieprasīt visa foruma uzmanību.

Tagad zini, ko meklēt - atliek debugot.

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: Networking Question

#45 Post by CodeWolf » 28 Jan 2012, 15:09

nu es jau neprasiju īsti par eroru.. vienkārši ja tad izsaucu funkciju case iekš case
tad man izmetas tas errors + pat nemaz nezinu vai drīkst tā darīt..
Image
//OpenGL

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: Networking Question

#46 Post by bubu » 28 Jan 2012, 21:55

Wtf - ko nozīmē "izsaukt case iekš case"? Izsaukt var tikai funkcijas..
Īsti arī nesaprotu kā tavs augstāk rakstītais kods saistās ar jebko, ko tu saki. Bet nu kodu strukturēt drīkst kā grib. Iekš viena switch'a drīkst būt cits switch's, ja tas ir tas, ko tur prasi.
Un ja kautkas nestrādā kā plānots, tad lieto debugeri. Studijai ir ļoti labs debugeris. Izpildi kodu rindiņu pa rindiņai. Pēc katras aizdomīgākas rindiņas pārbaudi mainīgo vērtības - vai tās ir tādas, kā tu sagaidi. Utt..

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: Networking Question

#47 Post by CodeWolf » 28 Jan 2012, 22:58

hmh..
Pareizi saprati.
Es jau ta ari daru.. ,bet ja uztaisu precīzi tādu pašu kodu kā iekš maina tad vienkārši tās funkcijas tiek bloķētas... jeb vienkārši nestrādā

Code: Select all

float dPacket::read(float min, float max, float precision,int GameMessageIDs)
{
		RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
	        RakNet::Packet *packet;
		for(packet=peer->Receive(); packet; peer->DeallocatePacket(packet),packet=peer->Receive())
		{
			switch (packet->data[0])
			{
			case ID_GAME_MESSAGE_1://jeb GameMessageIDs
				{
					RakNet::BitStream bsIn(packet->data,packet->length,false);
					bsIn.IgnoreBytes(sizeof(RakNet::MessageID));
					bsIn.Read(tmp);
					printf("\n Client-  %f \n",tmp);
				}
			break;
			default:
				printf("Message with identifier %i has arrived.\n", packet->data[0]);
				break;
		}
	}
	return tmp;
}
izsaucot komandu tā pat netiek atspoguļota..
printf("\n Client- %f \n",tmp);
ar parasto
bsIn.Read(tmp);
iekš maina viss tiek saņemts un atspoguļots..
case ID_GAME_MESSAGE_1:
{
nm = Paka0->read(-100.0f,+100.0f,0.01f,ID_GAME_MESSAGE_1);
printf("\n%f\n", nm);
bsIn.Read(nm);
printf("\n%f\n", nm);

}
break;
Cik zinu kods ir pareizs.. bet kautkas neļauj paku lasītāj funkcijai nolasīt sūtijumu..
//OpenGL

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: Networking Question

#48 Post by bubu » 29 Jan 2012, 06:51

Nu kamon. Jau kuro reizi saku - lieto debugeri. Ieliec breikpointu funkcijas sākumā un spied F10/F11 un skaties kas notiek rindu pa rindai. Un pēc katra nospiediena Watch logā pārbaudi visu savu mainīgo vērtības. Neviens te nezīlēs tējas biezumos...

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: Networking Question

#49 Post by CodeWolf » 30 Jan 2012, 00:15

hmh okej viss strādā..tikai atkal esmu apstajies .. pie šiem 2 punktiem..

1. sakopojot pozicijasvienā int'ā tās iegūst šausmīgi lielu skaitli..
Image
kuru šaubos vai vispār drīkstu sūtīt.. kanekā atļautais limits ir +100.0f ,tās nevajadzētu kautkā saspiest..?

2. itkā izdomāju kā varētu iekļauties -100 un +100... scale' ojot jeb merogojot visu mazāku..bet
tad problēmas rada 0.01 precizitāte.. kura arī atspoguļojas vai rada nepilnibas 1majā punktā..
to gadijumā nevar roundot..(jeb noapaļot ar 0.01 uz augšu..)?
//OpenGL

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: Networking Question

#50 Post by bubu » 30 Jan 2012, 01:27

Limits +100 ir x, y un z mainīgajiem. Nevis pos_packet.

Post Reply

Return to “Iesācējiem / For beginners”