2014-02-10 51 views
1

我有一些問題,只是沒有在文檔中回答:https://developers.google.com/games/services/android/multiplayer谷歌播放實時多人遊戲問題

  1. RoomConfig.createAutoMatchCriteria(1, 3, 0)按預期不起作用。它只會嘗試匹配一個2人遊戲,從來沒有3,從來沒有4.我只有3個設備,但我花了大概2個小時試圖匹配設備,他們只成對完成。我讀了這篇文章:Auto Match Criteria in Google Multiplayer Sample BittonClicker Game for android其中有類似的問題。另外GamesClient.getSelectPlayersIntent(1, 3)也有同樣的錯誤。

  2. GamesClient.getRealTimeWaitingRoomIntent(room, 0)不能正常工作。該文檔指出「如果連接的參與者數量大於或等於指定的最小值以啓動遊戲,則啓用等候室UI中的」開始播放「選項。」然而在測試之後,我還沒有看到「開始播放」選項。會發生什麼情況是,當彈出「準備播放」消息後,第一個人連接後,等候室會自動退出。從0更改爲1具有相同的效果,因此更改爲Integer.MAX_VALUE。任何人都可以提供一種實現預期功能的方式嗎?我在這裏做錯了什麼?

  3. 我在Android上玩過一些多人遊戲,有用戶加入,然後離開,其他人替代他們。無論我爲自動匹配假設什麼參數,我都無法在測試中看到這一點。如果一名球員離開房間,另一名球員是否會來填補他的位置?如果是的話,Room.getParticipantIds()。size()會返回一個大於4的數字嗎?

  4. 在其中一些遊戲中,一旦遊戲開始,沒有其他人加入。我曾經測試過這些遊戲,但有一次我沒有加入房間並被告知它正在進行中。他們是否以某種方式告訴服務器遊戲已經開始,而不是與其他玩家匹配?其他玩家如何加入尚未開始的遊戲? (這些遊戲正在使用Google Play遊戲服務)

我還有其他問題,但我不想問不必要的問題。這些問題會非常有幫助,如果回答會大大減輕我的壓力。

謝謝你的時間。

回答

6

1)完全按照Google的意圖工作。沒有任何保證,如果你使用createAutoMatchCriteria(1,3,0)3個對手將被發現你的遊戲。在我的測試中,(同時請求4個設備)90%或更多的時間它將成爲2場比賽中的2場比賽開始。只有當我有一個設備邀請朋友或手動選擇AutoPick,那麼獲得3或4個玩家遊戲的機會大大增加(否則,純自動匹配產生2和2行爲)

2)如果我理解這種行爲是正確的,你會讓一個玩家離開等候室(通常是首先發起的設備),然後另一個玩家加入,但是第一個玩家離開等候室,另一個玩家離開了等待室?如果是這樣,那麼你需要確保你使用以下(我做在onRoomConnected

try { 
     bWaitRoomDismissedFromCode = true; 
     finishActivity(RC_WAITING_ROOM); 
    } catch (Exception e) { 
     dLog("would have errored out in waiting room"); 
    } 

這將然後關閉對於那些在候車室還是任何玩家候車室,並讓他們回到你的活動從下面,如果你想要「開始遊戲」的行爲,這隻有在邀請玩家已經接受邀請才能進入房間的情況下。(如果谷歌意味着它的工作進行自動匹配的另一種方式,他們沒有得到它那裏還)

公衆意向getRealTimeWaitingRoomIntent(客房,詮釋minParticipantsToStart)

返回的意圖,將顯示「等待房間「屏幕顯示加入實時多人空間的參與者的進度。請注意,這必須通過startActivityForResult(Intent,int)來調用,以便可以建立調用包的標識。

如果所需數量的對等體已連接並且現在可以開始遊戲,或者用戶明確要求現在開始遊戲,則活動結果將爲RESULT_OK。如果用戶未進行任何操作就退出候車室屏幕,則結果將爲RESULT_CANCELED。如果用戶明確選擇離開房間,則結果將是RESULT_LEFT_ROOM。

無論結果代碼是什麼,等候室活動都會返回一個包含EXTRA_ROOM中的Room對象的數據意圖,該數據意圖表示您最初在此處作爲參數傳遞的Room的當前狀態。

如果需要,等候室可以允許用戶在房間完全連接之前開始玩遊戲。這由minParticipantsToStart參數控制:如果至少有許多參與者(包括當前玩家)連接到房間,則在候車室用戶界面中將啓用「開始玩」菜單項。將minParticipantsToStart設置爲0意味着「開始播放」將始終可用,並且值MAX_VALUE將完全禁用該項目。注意:如果你確實允許用戶提前開始,你需要明確地告訴其他連接的同伴現在正在開始遊戲;請參閱開發者文檔以獲取更多詳細信

最後,請注意,候診室本身不會明確採取任何行動來改變房間或其參與者的狀態。因此,如果活動結果爲RESULT_LEFT_ROOM,實際上離開房間是主叫方的責任。或者如果結果是RESULT_CANCELED,則調用者有責任仔細檢查房間的當前狀態並決定是開始遊戲,繼續等待還是做其他事情。但請注意,雖然候車室處於活動狀態,但隨着參與者接受或拒絕邀請,會議室的狀態將發生變化,而且參加者的人數可能會隨着自動匹配球員的增加而改變。

3)Google Play遊戲服務(用於自動匹配)不具有此行爲。只有當一個房間的所有參與者被服務器找到並選擇時,房間纔會真正被連接(onRoomCreated並不意味着已經建立了通信室,如果他們在等待其他人加入...並且可以在服務擁有所有其他玩家時切換)onRoomConnected是對所有連接玩家的最後一次呼叫,並且表示房間已準備好傳遞消息。現在,如果你有intivees,行爲會改變,那麼是的,你可以看到一個被邀請者接受,但是如果他們離開了房間......沒有辦法讓它由AutoMatch填充,但你可以看到他們離開。 ..(多好啊?)

4)如果遊戲使用的是GPGS,那麼一旦創建了一個房間並將其放到onRoomConnected舞臺上,它就會被播放,並且不能再與該房間進行任何匹配。所以當你加入一個房間時,其他人都同時加入。所以當玩家離開時,其他人將無法加入。

公共抽象無效onRoomConnected(INT的StatusCode,客房)

當在實時房間裏所有的參與者都是完全連接調用。一旦所有的邀請被接受並且任何必要的自動匹配已經完成,這被調用。可能的狀態代碼包括:

STATUS_OK如果數據已成功加載並且是最新的。 STATUS_CLIENT_RECONNECT_REQUIRED如果客戶端需要重新連接到服務才能訪問此數據。 如果服務中發生意外錯誤,則爲STATUS_INTERNAL_ERROR。 參數 room完全連接的房間對象。如果無法成功加載,則該房間可以爲空。

+1

欣賞答案,尤其是數字3.我認爲這些信息對很多人都會有很大的幫助。 – user3294654