(转)分享一个cocos2d-x集成Photon的MMO(大型多人在线)游戏引擎

分享一个cocos2d-x集成Photon的MMO(大型多人在线)游戏引擎   

 
 
本人使用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的下载链接<a id="url_1" checkurl(this)"="" href="http://photon.the9.com/download" target="_blank" style="padding: 0px; margin: 0px; color: rgb(1, 95, 145); text-decoration: none; ">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要强大的多, 今后和大家多多交流学习!!


转自:http://photon10.blog.51cto.com/3851355/705123

(译)cocos2d里面如何用texture picker和像素格式来优化spritesheet.pdf (译)在cocos2d里如何制作各种按钮.pdf (译)如何使用cocos2d制作基于tilemap的游戏教程 第一部分.pdf (译)如何在cocos2d里面使用动画和spritesheet.pdf (译)如何用cocos2d制作iphone游戏:旋炮塔.pdf (译)如何用cocos2d制作iphone游戏:更猛的怪物和更多得管卡.pdf (译)如何使用cocos2d制作一个Slide Image Game:第一部分.pdf (译)如何使用cocos2d来制作一个塔防游戏:第一部分.pdf cocos2d 2.0 添加遮罩.pdf iOS Code Signing解惑.pdf iPhone上面的现实增强(Augmented Reality)入门教程.pdf OpenGL ES2.0 – Iphone开发指引.pdf OpenGLES2.0 Iphone开发指引:第二部分,纹理贴图.pdf 使用cocos2d和box2d制作滚动背景.pdf 加入敌人和战斗:如果使用cocos2d制作基于tiled地图的游戏:第三部分.pdf 在cocos2d里面如何使用物理引擎box2d:弹球.pdf 在cocos2d里面如何拖拽精灵.pdf 如何使用box2d来做碰撞检测(且仅用来做碰撞检测).pdf 如何使用CCRenderTexture来创建动态纹理.pdf 如何使用cocos2d1.0来给sprite添加Mask(遮罩).pdf 如何使用cocos2d制作一个塔防游戏:引子.pdf 如何使用cocos2d制作一个太空射击游戏.pdf 如何使用cocos2d制作一个打地鼠的游戏:(第二部分。完).pdf 如何使用cocos2d和box2d来制作一个Breakout游戏:第一部分.pdf 如何使用cocos2d和box2d来制作一个Breakout游戏:第二部分(完).pdf 如何使用cocos2d来制作一个打地鼠的游戏:第一部分.pdf 如何使用GameCenter制作一个简单的多人游戏教程:第一部分.pdf 如何使用GameCenter制作一个简单的多人游戏教程:第二部分.pdf 如何使用NSCoding和NSFileManager来保存你的应用程序数据.pdf 如何制作一个类似tiny wings的游戏:第一部分.pdf 如何制作一个类似tiny wings的游戏:第二部分(完).pdf 如何升级你的cocos2d版本.pdf 如何学好Iphone开发.pdf 如何查找资料.pdf 碰撞检测和收集物品:如何使用cocos2d制作基于tiled地图的游戏:第二部分.pdf (译)cocos2d精灵教程:第一部分.pdf (译)cocos2d精灵教程:第三部分.pdf (译)cocos2d精灵教程:第二部分.pdf (译)cocos2d菜单教程:第一部分.pdf (译)cocos2d菜单教程:第三部分(完).pdf (译)cocos2d菜单教程:第二部分.pdf (译)使用cocos2d和box2d来制作一个platformer游戏.pdf (译)如何使用cocos2d制作一个塔防游戏:第三部分.pdf (译)如何使用cocos2d制作一个塔防游戏:第二部分.pdf (译)如何使用cocos2d制作一个塔防游戏:第四部分(完).pdf (译)如何使用cocos2d制作一个滑动图片游戏教程:第二部分(完).pdf (译)如何用cocos2d制作一款简单的iphone游戏(第一部分).pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值