碼上快樂
1秒登錄
首頁
榜單
標簽
關於
搜索
相關內容
簡體
繁體
分享一個cocos2d-x集成Photon的MMO(大型多人在線)游戲引擎
本文轉載自
查看原文
2012-03-10 16:26
3544
cocoa2d
本人使用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
(6)
最后在
代碼
中加入#include "LitePeer.h"
Photon
工作流程
(1).
創建一個
LitePeer
類的實例對象
LitePeer * m_pLitePeer = newLitePeer(this);//
該類繼承了
public PhotonListener
(
2
).
調用
Connect()
方法來嘗試連接服務器,並通過實現
IPhotonPeerListener.PeerStatusCallback
來得到連接狀態的通知,成功的狀態是
StatusCode.Connect
。
(
3
).
周期性的調用
Service()
方法來獲取事件,同時發送
"
命令
"(
比如每秒十次
)
(
4
).
調用
OpJoin()
來加入游戲,通過實現
OperationResult()
來得到連接狀態的通知,成功的狀態是
LiteOpCode.Join
(
5
).
調用
OpRaiseEvent()
向服務器發送數據
(
6
).
通過實現
IPhotonPeerListener.EventAction()
來獲取服務器的數據更新
(
7
).
調用
LitePeer.OpLeave()
離開游戲,若
OperationResult()
返回
LiteOpCode.Leave
則表示服務器端已經確認成功離開。
(
8
).
調用
Disconnect()
以斷開連接,通過
PeerStatusCallback()
得到連接狀態的通知,
StatusCode.Disconnect
為成功斷開連接。
現在你可以使用
Photon
引擎的網絡庫了,它比系統的GameKit要強大的多,
今后和大家多多交流學習!!
×
免責聲明!
本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。
猜您在找
cocos2d-x游戲引擎核心之八——多線程
關於Cocos2d-x開發一個游戲的過程自述
Cocos2d-x for WindowsPhone:開發一個打地鼠游戲(下)
Cocos2d-x for WindowsPhone:開發一個打地鼠游戲(上)
一個簡單的打地鼠游戲
使用cocos2d-x和BOX2D來制作一個BreakOut(打磚塊)游戲(二)
Cocos2d-x 物理引擎及碰撞
Cocos2d-x 學習之引擎介紹
使用cocos2d-x制作一個太空射擊游戲
cocos2d-x游戲引擎核心(3.x)----啟動渲染流程
粵ICP備18138465號
© 2018-2025 CODEPRJ.COM