2016-03-23 7 views
1

私はちょうどクライアント側のためのjQueryとバックエンドのためのnode.jsとsocket.ioを使用してゲームのPongの実装を完了しました。私はフリーティアのAWSインスタンスにゲームを載せ、メカニックはうまく動作しますが、レイテンシーは再生できません。ゲームでは、それを制御するプレイヤーのパドルがローカルに移動します。クライアント側はまた、requestFrameAnimationごとにパドル移動を相手にブロードキャストするサーバー要求を送信します。ボールを打ち出すには、それを提供するプレーヤーがスペースバーを押して、サーバー要求を送信します。スペースバーはボールの動きを開始するために両方のプレーヤーに送信されます。リアルタイムsocket.ioのポンゲームをより速く作る

パドルの移動とボールの打ち上げの両方が待ち時間に苦しんでいます。パドルの場合、私は問題は、おそらく速度の速いサーバーの要求をすべてrequestFrameAnimationに送信していることだと思います。たぶん、プレーヤーのパドルポジションを1秒ごとに相手に送信するsetIntervalを作成する必要があります。ボールについては、サーバーが移動を開始する信号が送られてくるので、スペースバーが押された時間よりも先にボールが実際に発射され、各ローカルマシンがその時間までカウントダウンできるようにする必要があると思う。ここで

は、いくつかのコンテキストのための私のクライアント側コードのスニップです:

function updateFrame(){ 
    paddleSpeed = 0; 
    if (keysPressed.up){ // Move paddle up 
     if (!(myPaddle.offset().top <= arena.offset().top)){ // Make sure paddle isn't at top 
      paddleSpeed -= 8; 
     } 
    } 
    if (keysPressed.down) { // Move paddle down 
     if (!(myPaddle.offset().top+paddleL.height() >= arena.offset().top + arena.height())){ // Make sure paddle isn't at bottom 
      paddleSpeed += 8; 
     } 
    } 
    if (paddleSpeed != 0) socket.emit("moveReq", paddleSpeed); // Send server request to be sent to opponent 
    myPaddle.css({top: '+='+paddleSpeed+'px'}); // Move paddle locally 
    if (gameInProgress){ // If round has started, move the ball 
     ball.css({left: '+='+ballSpeed.hor+'px', top: '+='+ballSpeed.ver+'px'}); 
     window.requestAnimationFrame(updateFrame); // Request next frame 

と私のサーバー・サイド:

socket.on('moveReq', function(data){ 
    socket.broadcast.emit("movePaddle", data); // Send opponent's paddle movement to user 
}); 

socket.on('launchGame', function(){ // Launch the game 
    io.sockets.emit('startGame'); 
}); 

誰もが私のゲームの待ち時間を短縮するための任意のヒントを持っています、または私のフリー層は、この種のWebアプリケーションの帯域幅があまりにも低いですか?

+0

あなたはどんなaws地域に住んでいますか?あなたはどの地域のサービスをホストしていますか?あなたの相手はあなたの地域に何を住んでいますか?これはあなたが経験しているレイテンシに貢献している可能性があります。 – poida

+0

西海岸NA。しかし、私は自分のローカルホストでこのゲームを試しても、別のコンピュータで無線LANに接続しても、遅いです。 – MarksCode

答えて

1

このゲームを簡単に実行するのに十分な帯域幅があるはずなので、私はあなたの問題だとは思わない。

代わりに、オンラインゲームの開発についてのブログthisをご覧ください。私は、マルチプレイヤーゲームの開発を開始したときに、そこに記載されているアイデアを使用しました。オンラインゲームを開発する際のいくつかの重要な問題と解決策について説明します。

+0

私は自分のローカルホストを経由して実行し、wifi経由で別のコンピュータに接続すると、 – MarksCode

+0

以前にリンクしたブログ/記事に記載されているように、おそらくサーバーの待ち時間に依存しないようにクライアント側の予測を追加することをお勧めします。 –

+0

うん、それはかなり複雑に聞こえるが、私は試してみよう! – MarksCode

関連する問題