[Desempenho] Obter maior desempenho do PC no jogo

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Desempenho] Obter maior desempenho do PC no jogo

Mensagem por machosupremo em Seg 29 Abr 2013, 17:08

[INTRODUÇÃO]
Estou fazendo um MMO em cima do meu "POKEDOTA" no qual o funcionamento do servidor vai permitir varias Partidas simultâneas .

Em vista disso, durante minha experiencia percebi que muitos objetos com os eventos "BEGIN STEP; STEP; END STEP", torna o pc mais lento podendo até travar o jogo.

[Sobre um jogo MMO] Meus primeiros estudos, me permitiu criar um jogo no qual seu funcionamento se deriva dos seguintes componentes(objetos):
*1 para receber as novas conexões;
*1 para cada novo jogador conectado; (isto é, quando um pessoa se conectava, era criado um objeto para este novo jogador então era armazenando o valor do seu socket, então a cada passo (STEP) ele verificava se havia uma nova mensagem).

Mas como eu ja mencionei, em uma das experiencias percebi que isso compromete em muito o desempenho da maquina (fiz isso em um TD que estou desenvolvendo, cada monstro tinha o EVENTO STEP para poder andar e reagir aos eventos do jogo, mas travava quando tinha muita MOB).

Então formulei outra estrutura, na qual uso no "POKEDOTA".
SERVDOR apenas um unico objeto, com os eventos "BEGIN STEP; STEP; END STEP", e dentro deste evento eu uso:
*with(objeto_jogador_deslogado)
*with(objeto_jogador_logado)
*with(objeto_jogador_em_partida)

então quando existe uma nova mensagem, este unico objeto "CONTROLADOR" toma as decisões.

[DISCUSSÃO]
Em vista dos processadores de múltiplos núcleos, caso eu crie mais de um objeto controlador obteria um desempenho mais solido, seguindo inicialmente a estrutura:
*controlador_novas_conexoes
*controlador_jogadores_em_espera (jogadores ja logados porem não então em nenhuma partida)
*controlador_partidas (este talvez 1 para cada partida, mas penso eu em criar um para controlar todas as partidas no jogo)

Pergunta: 1 Alguem tem o conhecimento, para dizer qual a medida mais adequada? Como conseguir o melhor desempenho?

Pergunta: 2 Sobre variaveis, qual é mais eficiente? Criar uma variavel global, ou criar uma variavel em um objeto principal (objetos secundarios teriam que acessar essas variaveis Ex: variavel_temporaria = obj_Mestre.variavel).

Pergunta: 3 Dentro de um objeto, supõe-se que precise atribuir muitas variaveis e/ou comandos em outro objeto. Qual mais eficaz? Usar:
var o = objeto2;
o = var1
...
o = varetc

OU with(objeto2){ instruçãpo}

machosupremo

Número de Mensagens : 99
Idade : 26
Data de inscrição : 10/10/2012
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.dinoup.com

Voltar ao Topo Ir em baixo

Re: [Desempenho] Obter maior desempenho do PC no jogo

Mensagem por Rodrigo Santiago em Seg 29 Abr 2013, 18:28

Calma com as perguntas.
Primeiro : se no seu jogo existem vários objetos que estão 'online' não será nessesário usar todos os PCs que estiverem conectados para realizar as suas funções mais complexas, eles vão usar apenas dados da rede.
Segunda - Global - Definitivamente é melhor e mais fácil de ser assesada.Tem até uma clave especial globalvar pra vc não ter que colocar global. antes do nome. Além de não acarretar erros ao passar de rooms e usar with.
Terceira: With - concerteza

A ideia é ótima, usar um unico objeto que usará a maiorias das funções de rede e distribui-los em variáveis que serão acessadas pelas 'multidões' de instancias. Olha só um aprimoramento: Selecione um computador para realizar todos os calculos comlicados, e ele recebe simplesmente a função de click do mouse dos outros.

Assim que eu faria:

O computador fornecedor do jogo - (client) <- sim , um client
Dados da rede - interação dos outros usuários (mouse, teclado) em bit
Instancias - Realiza as ações
Objeto controlador - Envia os dados para todos os participantes

O computador recedor do jogo - (client)
Dados de rede - Valores recebidos
Objeto controlador - Valores adicionados a variáveis globais
Instancias - Ações feitas com base nas variáveis globais.

Rodrigo Santiago

Ranking : Nota B
Número de Mensagens : 1281
Idade : 20
Data de inscrição : 28/07/2012
Notas recebidas : C + C + B
Reputação : 73
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 1
   : 3

Voltar ao Topo Ir em baixo

Re: [Desempenho] Obter maior desempenho do PC no jogo

Mensagem por PedroX em Seg 29 Abr 2013, 20:42

Pergunta: 1 Alguem tem o conhecimento, para dizer qual a medida mais adequada? Como conseguir o melhor desempenho?
Criar instâncias seria o mais fácil. Criar uma ds_list adicionando-lhe cada socket e depois fazer um loop para verificar cada um gastaria menos memória, mas seria mais lento (ou seja, quanto menos processamento em GML, que no caso seria com loops, maior é a performance).

Pergunta: 2 Sobre variaveis, qual é mais eficiente? Criar uma variavel global, ou criar uma variavel em um objeto principal (objetos secundarios teriam que acessar essas variaveis Ex: variavel_temporaria = obj_Mestre.variavel).
Acho que usar um objeto central poderia gastar menos memória, mas seria mais lento (ou não, é uma hipótese).

Pergunta: 3 Dentro de um objeto, supõe-se que precise atribuir muitas variaveis e/ou comandos em outro objeto. Qual mais eficaz? Usar:
var o = objeto2;
o = var1
...
o = varetc

OU with(objeto2){ instruçãpo}
With é mais rápido.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Desempenho] Obter maior desempenho do PC no jogo

Mensagem por machosupremo em Seg 29 Abr 2013, 21:34

Rodrigo Santiago escreveu:Calma com as perguntas.
Primeiro : se no seu jogo existem vários objetos que estão 'online' não será nessesário usar todos os PCs que estiverem conectados para realizar as suas funções mais complexas, eles vão usar apenas dados da rede.
então essa nãi ficou muito claro, porque parece que sua resposta é pensando no cliente, eu faço essa pergunta pensando no servidor. Porque ele vai ter que processar muita coisa (novas conexões, interações do usuario fora do jogo, e interações dentro das partidas, imagine 10 partidas vezes 10 jogadores vezes até 6 pokemons cada vezes as creeps, torres, NPCs).

Rodrigo Santiago escreveu:Selecione um computador para realizar todos os calculos comlicados, e ele recebe simplesmente a função de click do mouse dos outros.

Assim que eu faria:

O computador fornecedor do jogo - (client) <- sim , um client
Dados da rede - interação dos outros usuários (mouse, teclado) em bit
Instancias - Realiza as ações
Objeto controlador - Envia os dados para todos os participantes

O computador recedor do jogo - (client)
Dados de rede - Valores recebidos
Objeto controlador - Valores adicionados a variáveis globais
Instancias - Ações feitas com base nas variáveis globais.

essa aqui não ficou muito claro, a questão dos dois serem clientes.

A questão de deixar um PC exclusivo para os calculoas, porque era isso que penso estar fazendo.Eu ja pensei em fazer um servidor exclusivo para cálculos e repassar as ações, porque este não perderia performance com efeitos visuais.


Última edição por machosupremo em Seg 29 Abr 2013, 21:35, editado 1 vez(es) (Razão : caráter visual)

machosupremo

Número de Mensagens : 99
Idade : 26
Data de inscrição : 10/10/2012
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.dinoup.com

Voltar ao Topo Ir em baixo

Re: [Desempenho] Obter maior desempenho do PC no jogo

Mensagem por Conteúdo patrocinado Hoje à(s) 23:57


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum