本人使用cocos2d-x與Photon做了一個簡單的MMO例子,需要開2個以上的客戶端才能看到多人在線的效果,該版本目前支持ios和win32平台,實現了多人同時在線的功能,希望對大家研究手機網游有所幫助。
首先給大家介紹一下MMO的一些概念
虛擬世界(IWorld)是一個虛擬的坐標系的空間。在這個虛擬空間的實體被稱為Item。客戶端定義了他們感興趣的area(位置和范圍),並且只能“看見”InterestArea邊界內的items。

計算哪些items進入了interestareas非常消耗CPU的資源,特別是items和interest areas頻繁移動的話。加快計算的一個簡單的方法:虛擬空間划分為固定區域,然后計算出哪些區域與interest area重疊。客戶端應收到這些重疊區域的items的所有事件。最簡單的算法是使用貼圖算法(被稱為Square Tile Algorithm)。

當有item進入客戶端的interestarea里,客戶端將接收所有由item發出(或通過)的事件。由於一個移動在interest area邊緣的item會頻繁得產生訂閱和未訂閱得變化,以此引入了一個更大的interest area額外的半徑: 訂閱過的items跨出了這個半徑將會退訂,客戶端將不再接受到這個item的事件。

Interest areas有兩個interest閾值。Items進入內半徑變得可見; items離開外半徑變得不可見。這種優化可以減少頻繁的可見變化
1. 不可見item,超出范圍
2. 不可見item在interestarea之外
3. 不可見item進入interestarea,變為可見
4. 可見item離開interestarea的內半徑
5. 可見item離開interestarea的外半徑,變為不可見。

然后給大家介紹下Photon網游的引擎
Photon是國內引進的第一款集產品、服務和技術支持於一體的網絡引擎,可快速的在多個平台構建高性能且可擴展的多人在線網絡游戲及應用。
Photon在Cocos2d-x中的配置
(1) 把Photon-iPhone_SDK中的Common-c, Common-cpp,Photon-c,Photon-cpp文件夾拷到你工程的目錄中(SDK的下載鏈接http://photon.the9.com/download)

注意:以下操作都是在Targets中的Get Info中進行

(2) "Header Search Paths" 中添加
PhotonLib/Common-c/inc
PhotonLib/Common-cpp/inc
PhotonLib/Photon-cpp/inc
PhotonLib/Photon-c/inc

(3) "Library Search Paths" 中添加
PhotonLib/Common-cpp/ios_lib
PhotonLib/Photon-cpp/ios_lib

(4) "Other Linker Flags"中添加
-lPhoton-cpp_$(CONFIGURATION)_$PLATFORM_NAME
-lCommon-cpp_$(CONFIGURATION)_$PLATFORM_NAME

(5) 把Configurations中的Debug和Release改成小寫的debug和release

