分享一个cocos2d-x集成Photon的MMO(大型多人在线)游戏引擎
2011-11-03 16:42
603 查看
分享一个cocos2d-x集成Photon的MMO(大型多人在线)游戏引擎
本人使用cocos2d-x与Photon做了一个简单的MMO例子,需要开2个以上的客户端才能看到多人在线的效果,该版本目前支持ios和win32平台,实现了多人同时在线的功能,希望对大家研究手机网游有所帮助。首先给大家介绍一下MMO的一些概念
虚拟世界(IWorld)是一个虚拟的坐标系的空间。在这个虚拟空间的实体被称为Item。客户端定义了他们感兴趣的area(位置和范围),并且只能“看见”InterestArea边界内的items。
![](http://photon.the9.com/upload/document/1318319331.png)
计算哪些items进入了interestareas非常消耗CPU的资源,特别是items和interest areas频繁移动的话。加快计算的一个简单的方法:虚拟空间划分为固定区域,然后计算出哪些区域与interest area重叠。客户端应收到这些重叠区域的items的所有事件。最简单的算法是使用贴图算法(被称为Square Tile Algorithm)。
![](http://photon.the9.com/upload/document/1318319344.png)
当有item进入客户端的interestarea里,客户端将接收所有由item发出(或通过)的事件。由于一个移动在interest area边缘的item会频繁得产生订阅和未订阅得变化,以此引入了一个更大的interest area额外的半径: 订阅过的items跨出了这个半径将会退订,客户端将不再接受到这个item的事件。
![](http://photon.the9.com/upload/document/1318319356.png)
Interest areas有两个interest阈值。Items进入内半径变得可见; items离开外半径变得不可见。这种优化可以减少频繁的可见变化
1. 不可见item,超出范围
2. 不可见item在interestarea之外
3. 不可见item进入interestarea,变为可见
4. 可见item离开interestarea的内半径
5. 可见item离开interestarea的外半径,变为不可见。
![](http://photon.the9.com/upload/document/1318319644.png)
然后给大家介绍下Photon网游的引擎
Photon是国内引进的第一款集产品、服务和技术支持于一体的网络引擎,可快速的在多个平台构建高性能且可扩展的多人在线网络游戏及应用。
Photon在Cocos2d-x中的配置
(1) 把Photon-iPhone_SDK中的Common-c, Common-cpp,Photon-c,Photon-cpp文件夹拷到你工程的目录中(SDK的下载链接http://photon.the9.com/download)
![](http://photon.the9.com/upload/pic/image/20111024/20111024111453_74066.png)
注意:以下操作都是在Targets中的Get Info中进行
![](http://photon.the9.com/upload/pic/image/20111024/20111024111554_59679.png)
(2) "Header Search Paths" 中添加
PhotonLib/Common-c/inc
PhotonLib/Common-cpp/inc
PhotonLib/Photon-cpp/inc
PhotonLib/Photon-c/inc
![](http://photon.the9.com/upload/pic/image/20111024/20111024111634_25438.png)
(3) "Library Search Paths" 中添加
PhotonLib/Common-cpp/ios_lib
PhotonLib/Photon-cpp/ios_lib
![](http://photon.the9.com/upload/pic/image/20111024/20111024111708_13119.png)
(4) "Other Linker Flags"中添加
-lPhoton-cpp_$(CONFIGURATION)_$PLATFORM_NAME
-lCommon-cpp_$(CONFIGURATION)_$PLATFORM_NAME
![](http://photon.the9.com/upload/pic/image/20111024/20111024111742_34772.png)
(5) 把Configurations中的Debug和Release改成小写的debug和release
![](http://photon.the9.com/upload/pic/image/20111024/20111024111811_64398.png)
(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要强大的多,今后和大家多多交流学习!!
相关文章推荐
- (转)分享一个cocos2d-x集成Photon的MMO(大型多人在线)游戏引擎
- 分享一个cocos2d-x集成Photon的MMO(大型多人在线)游戏引擎
- 使用Cocos2d-x-3.0游戏引擎编写一个塔防游戏1
- 【Cocos2D-X 游戏引擎】初窥门径(1) 制作一个动态的精灵
- Cocos2d-HTML5游戏引擎,编写一个简单的打飞机游戏
- Android Cocos2d-x游戏集成友盟社会化组件分享功能
- [入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第一回合: 搭建开发环境
- Android Cocos2d-x游戏集成友盟社会化组件分享功能
- Android Cocos2d-x游戏集成友盟社会化组件分享功能
- 分享一个自己练手的Cocos2d游戏例子
- 信数金服决策引擎分享(一):来聊聊冠军/挑战者试验,一个数字游戏
- Cocos2d-x游戏引擎开发[3]----建立锚点 (重建了一个类)
- Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎
- 如何使用cocos2d-x3.0和物理引擎来制作一个Breakout游戏:第一部分
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植2:如何新建一个项目,引擎目录结构介绍
- 如何使用cocos2d-x3.0和物理引擎来制作一个Breakout游戏:第二部分
- 使用cocos2d-x游戏引擎做一个helloworld界面
- Android Cocos2d-x游戏集成友盟社会化组件分享功能
- 【Cocos2D-X 游戏引擎】初窥门径(1) 制作一个动态的精灵
- 大型在线游戏服务器架构分享