2014-10-21 3 views
0

아주 기본적인 멀티 플레이어 게임을하기로 결정했습니다. 현재, 존재 탐지가 작동하도록 성공적으로 관리했습니다. 새 사용자가 로그인하면 그의 div가 초기 화면에 표시되지만 그게 전부입니다. 이동시킬 때마다 각 div의 위치를 ​​업데이트해야하고 Firebase에 저장해야하는지 알고 싶습니까?다른 div 이동을 볼 수 없습니다

presence.on('value', function(snapshot) { 
     var online = snapshot.numChildren(); 
     $('#online').html(online + ' online.'); 
     $('#game').append('<div class="'+ uid +'" id="character"></div>'); 
    }) 

나는 또한 각각을 구분하기 위해 특정 UID를 div에 제공하기로 결정 : 여기에 사용자가 로그인 사업부를 추가하는 무슨 현재입니다. 아래의 코드를 살펴보면 기본적인 이동 시스템도 포함되어 있습니다. 나는 사람이 함께 감사합니다 사전에 나를 도울 수 있기를 바랍니다 http://jsfiddle.net/gk9cm6t9/2/

:

여기에 바이올린입니다!

+0

모든 플레이어가 모든 플레이어의 위치를 ​​알아야하는 경우, 예. 모든 플레이어에서 위치를 동기화해야합니다. 그러나 그것이 당신의 게임을 위해 필요한 것이 당신이 결정할 수있는 것입니다. 당신이 정확히 무엇을 성취하려고하는지, 어디에서 붙어 있었는지를 분명히 밝히지 않는다면, 나는이 질문을 분명치 않게 끝낼 것입니다. –

+0

난 그저 뒤에있는 논리를 이해하지 못한다. 그리고 내 목표를 달성해야하는 부분에서 출발해야한다. div를 움직이면 다른 사용자의 화면에 나타납니다. 이처럼 멀티 플레이어 자습서를 찾는 데 많은 시간을 할애했지만, 충분히 간단해야한다고는하지만 내가 성취하고자하는 것에 대해서는 아무 것도 발견하지 못했습니다. – NotToBrag

답변

1

당신의 바이올린의 코드는 현재 두 가지 않습니다 : 커서 키를 사용할 때

  1. 가 채팅방
  2. 이동 화면 주위에 상자에 존재하는 사용자/플레이어를 청취을

하지만 두 개의 코드는 현재 완전히 관련이없는 것처럼 보입니다. 이것을 멀티 플레이어 게임으로 만들려면 각 사용자의 상자가있는 좌표를 다른 플레이어에게 보내야합니다. 다행히도 이것은 파이어베이스가 탁월한 것입니다.

positions 
    uid1: { x: 100, y: 150 } 
    uid2: { x: 25, y: 200 } 

각 플레이어는 단순히 모든 위치를 수신하고 올바른 위치에 상자를 그릴 수 :

는이 같은 데이터 구조를 가지고 있다고 말한다. 각 플레이어는 키보드를 조작하고 Firebase에서 키보드의 위치를 ​​업데이트 할 수 있습니다. 그러면 루프백되어 모든 플레이어에게 알립니다. 뭔가가 이미

당신을 변경할 때마다

  • 모든 플레이어 상자를 그릴 처리 키보드에서 중포 기지에서 플레이어의 위치를 ​​

    1. 갱신 :

      그래서 이들은 당신이 걸릴하는 데 필요한 단계는 키보드 처리 코드를 가지고 있으므로, Firebase에 새로운 위치를 저장하는 코드를 추가하면됩니다.

      var myPositionRef = firebaseRef.child('positions').child(uid); 
      
      $(document).keydown(function(e) { 
          switch (e.which) { 
          case 37: 
           $('#character').stop().animate({ 
           left: '-=10' 
           }); //left arrow key 
           myPositionRef.transaction(function(currentPosition) { 
           if (currentPosition) { 
            currentPosition.x -= 10; 
           } 
           else { 
            currentPosition = { x: 0, y: 0 }; 
           } 
           return currentPosition; 
           }); 
           break; 
          ... 
          } 
      

      이 작업을 수행하는 데 수십 가지의 다른 방법이 있지만이 방법을 사용하면 시작할 수 있습니다.

  • +0

    프랭크 고마워요! – NotToBrag

    +0

    질문이 하나 더 있습니다! http://jsfiddle.net/gk9cm6t9/5/ 위치를 업데이트하려고 할 때 "정의되지 않은 속성 x를 읽을 수 없습니다"라는 메시지가 나타나는 이유 – NotToBrag

    +0

    내 코드는 작업 방법이 아닌 작업 수행 방법에 대한 일반적인 개요로 사용되었습니다. 예. 이와 같은 오류가 발생하면 브라우저의 디버거에 중단 점을 설정하고 코드를 단계별로 실행하여 모든 단계에서 변수를 검사하십시오. 그렇게하면 다양한 장소에서 코드를 복사/붙여 넣을 수있는 것보다 더 많이 가르쳐줍니다. –

    관련 문제