Open filipedeschamps opened 5 years ago
Acho que tem muita coisa alí pra ser movida pro backend hein Filipe. Postei um story lá no Instagram e te marquei com uma pontuação absurda 😂😂
hahahhahah sensacional!!!
A ideia é fazer do jeito mais pragmático possível ou rola usar libs como RxJS?
@leocavalcante kkkk boa! Acho que agora seria um quickfix só pra deixar mais jogável pro restante da turma. Mais pra frente quero separar o repositório em pastas para cada um fazer a sua implementação/modificação assim como no repo do fogo do doom
Caramba, eu já tinha chegado em mais de mil pontos jogando lá aí do nada veio um bot fazendo praticamente teletransporte de uma frutinha a outra kkkk. Eu era o user p5mkHM..... kkkkkkkkkkkk. Outra coisa interessante seria quicar o usuário que permanecer na mesma posição depois de um tempo, faz umas 3 verificações a cada 1 minuto e se ele ainda estiver na mesma posição aí desconecta ele.
Uma coisa que reparei é que toda atualização de dados do servidor é enviada a todos os usuários em seguida. Seria interessante implementar uma função heartbeat com um intervalo fixo, assim a cada 30 ms, por exemplo, o servidor enviaria as informações para os clients. Acho que isso ajudaria muito a questão de performance do jogo.
Fui brincar disso agora aqui em casa e tava pensando: Não é só questão de pegar a função que você já tem no cliente:
function throttle(callback, delay) {
let isThrottled = false,
args,
context;
function wrapper() {
if (isThrottled) {
args = arguments;
context = this;
return;
}
isThrottled = true;
callback.apply(this, arguments);
setTimeout(() => {
isThrottled = false;
if (args) {
wrapper.apply(context, args);
args = context = null;
}
}, delay);
}
return wrapper;
}
Copiar pro server e usar:
const game = {
canvasWidth: 35,
canvasHeight: 30,
players: {},
fruits: {},
addPlayer,
removePlayer,
movePlayer: throttle(movePlayer, 80),
addFruit,
removeFruit,
checkForFruitColision,
clearScores,
};
?
Será que isso não vai ficar aplicado de forma global?
Mas talvez colocar aqui: https://github.com/filipedeschamps/meu-primeiro-jogo-multiplayer/blob/master/source/server.js#L50
Deu certo, o problema é que o client e o server ficam dessincronizados, porque em nenhum momento isso é normalizado de volta ao client. Mas que bloqueia, bloqueia kkkk
Na verdade, acho que fica global mesmo, de ambas as formas. Afinal, ainda é o mesmo método pra todos os clients. Teria que ter um throttle pra cada socketId. Se player for um objeto e a função move estiver nele, acho que já resolve.
Ah boa! Esqueci de avisar que tinha colocado a declaração da função dentro do escopo do socket
On Wed, Aug 28, 2019 at 7:40 PM Leo Cavalcante notifications@github.com wrote:
Na verdade, acho que fica global mesmo, de ambas as formas. Afinal, ainda é o mesmo método pra todos os clients. Teria que ter um throttle pra cada socketId. Se player for um objeto e a função move estiver nele, acho que já resolve.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/filipedeschamps/meu-primeiro-jogo-multiplayer/issues/6?email_source=notifications&email_token=ABANEELUIF5WDZNHE44GMZLQG4ZJJA5CNFSM4IROBB62YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5NBJHY#issuecomment-525997215, or mute the thread https://github.com/notifications/unsubscribe-auth/ABANEEPS7JSHEZNGSEODK3TQG4ZJJANCNFSM4IROBB6Q .
Antes de qualquer coisa, dois palitos de tiétagem, @filipedeschamps quero parabenizar o teu trabalho, e agradecer, por reacender a minha chama da programação, pra mim os puxões de orelha que você dá cai como uma luva... Mas voltando ao assunto em questão, num sei se é porque eu não entendi direito essa função throttle, mas não vejo função pra ela, não seria mais justo, colocar um emit, no EventListener..? Estou estudando o ponto...
O próprio handlerKeydown faz o serviço, pra controlar a velocidade, é aplicar a física mesmo, player já tem score, posição cabe uma velocidade, o deslocamento = velocidade * deltaTempo, o requestAnimationFrame, da o compasso, só num sei se é justo fazer uma requisição a cada quadro, uma coisa que eu vi é que o servidor num atualiza, o cliente de sua posição, e outra coisa engraçada é tentar passar uma fração de um pixel, para o pixel seguinte, tipo player.x = player.x +0.5
Já colocaram um bot pra andar na velocidade da luz de novo 😂
Quem controla o throttling hoje é o frontend, alguém se arrisca a fazer uma versão no backend para a gente deployar?