网易ITOWN平台架构.docx

上传人:b****5 文档编号:5908252 上传时间:2023-01-02 格式:DOCX 页数:14 大小:162.59KB
下载 相关 举报
网易ITOWN平台架构.docx_第1页
第1页 / 共14页
网易ITOWN平台架构.docx_第2页
第2页 / 共14页
网易ITOWN平台架构.docx_第3页
第3页 / 共14页
网易ITOWN平台架构.docx_第4页
第4页 / 共14页
网易ITOWN平台架构.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

网易ITOWN平台架构.docx

《网易ITOWN平台架构.docx》由会员分享,可在线阅读,更多相关《网易ITOWN平台架构.docx(14页珍藏版)》请在冰豆网上搜索。

网易ITOWN平台架构.docx

网易ITOWN平台架构

一、开发包介绍

开发包简要介绍

目标

  iGate开发包主要用于开发中小型游戏,提供2d到3d游戏的解决方案。

通过开放平台,为游戏开发者提供各种技术以及功能支持,帮助开发者便捷地开发出优质的游戏,接入iTown平台运营,通过多样化奖励保障开发者的收益;同时,让iTown平台的内容更加丰富,把iTown打造成一个丰富的中小游戏平台,从而达到双赢的目的。

我们提供

  Gamefans庞大、共享的玩家群体——你只需专注游戏开发,我们负责游戏的发布、推广与运营。

  Assistance专业、优质的服务支持——我们有专门的团队对开发包进行持续开发,解答开发者问题。

  Tools免费、强大的开发工具——我们提供游戏开发相关的多个编辑器;预先构建游戏框架逻辑;并提供游戏附属的好友、聊天、排行榜等各种社交功能。

  Earnings丰厚、持续的经济回报——上线奖金、在线人数奖励、收入分成,多样化的奖励制度给您保障与前景。

你只需

  Idea专注开发游戏核心玩法,轻松开启成功大门。

开发包结构图

iTown游戏服务器结构图:

点图放大

  *右侧框起来的范围是sdk功能空间

  *第3方游戏通过SDK开发包制作并提交接入到iTown游戏平台。

点图放大

开发包有什么

  1、2D引擎以及相关编辑器

  2、游戏服务器引擎

  3、iTown平台功能接口(好友获取、聊天功能、聊天频道的接口、游戏启动和退出接口、扣费接口、成就相关接口、游戏排行接口)

  4、相关文档及接口

开发包接口版本

  开发包会有一个版本号,通常,不同版本的SDK会对已发布的接口进行兼容。

    *如果是2d/3d引擎接口出现不兼容情况,我们会再提供另外一个接口,一定时期后再删除旧有接口,来尽量保证接口兼容性。

    *iTown平台提供的功能接口会同时提供各不同版本的API接口来保证兼容性。

开发流程

二、服务器端详解

服务器总体结构

我们提供的游戏平台的单组服务器结构,结构如图:

上图是一组游戏服务器(gameserver),一个游戏可以有多组这样的游戏服务器.一个游戏进程,就是玩家看到的一个游戏频道(channel),游戏进程里,我们分成“大厅”,“房间”,如下图:

作为第三方的游戏开发者,只需要实现”房间”逻辑。

其他由iGate游戏平台提供。

平台数据

数据存储,我们分两部分,一部分是平台提供的数据,一部分是游戏的数据。

其中,游戏的数据,我们提供基本数据存储,如果存储空间不够,支持游戏自己建表。

平台数据

平台提供以下数据,供游戏共享:

1)角色基础数据

角色基础数据有:

账号(urs)

账号唯一id(aid)

账号的禁止权限(banlvl)

账号的gm权限(gmlvl)

角色唯一id(uid)

角色昵称(nickname)

角色性别(sex)

角色avatar(avatar)

角色所带的宠物(pet)

付费元宝(ybpay)==>晶币(ybpay)(付费点卡换成的钱)

免费元宝(ybfree)==>赠卷(ybfree)(免费点卡换成的钱和系统赠送的钱)

2)成就数据

成就id(ch_id):

成就ID。

游戏id(gamei):

对应哪个游戏的成就。

玩家id(uid):

玩家UID

获得成就的时间(get_time):

获得某个成就的时间

3)排行榜数据

积分(score):

广泛意义上的分数,大量游戏都有可能用到。

(可选)

胜局(win_count):

胜利局数。

(可选)

平局(draw_count):

平局局数。

(可选)

负局(lose_count):

负局局数。

(可选)

掉线(break_count):

掉线局数。

(可选)

自定义1(tag1):

游戏自定义数据1,供游戏排行扩展用。

(可选)

自定义2(tag2):

游戏自定义数据2,供游戏排行扩展用。

(可选)

自定义3(tag3):

游戏自定义数据3,供游戏排行扩展用。

(可选)

自定义4(tag4):

游戏自定义数据4,供游戏排行扩展用。

(可选)

自定义5(tag5):

游戏自定义数据5,供游戏排行扩展用。

(可选)

自定义6(tag6):

游戏自定义数据6,供游戏排行扩展用。

(可选)

4)好友数据

好友分组(setname):

好友所在分组

在线状态(online):

好友是否在线

游戏状态(games):

好友在玩游戏吗?

在玩什么游戏?

5)与其他游戏和社区交互的数据(尚未开放)

游戏基本数据

目前,提供的每个玩家的游戏基本数据有:

1)基本信息

包括:

   coin游戏自己的游戏币

   score分数

   win_count胜局

   draw_count平局

   lose_count败局

   break_count逃跑的局数

2)道具信息

每个玩家允许有多个道具,其中每个道具格式如下:

   itemtype道具类型

   count道具数量

   timeitem是否时效性道具

   buytime购买时间

   deadtime过期时间

   msg64字节的存储空间

   valueint存储空间

   status状态

3)额外存储空间

每个玩家有16个256字节的存储空间(buf),命名分别为:

buf0-buf15.其中,buf10-buf15暂时被利用为公共存储空间.因此游戏能使用的实际是:

buf0-buf9。

游戏额外数据

如果平台数据、游戏基本数据,依然无法满足游戏的存储需求,游戏可以自己创建数据库表进行存储(具体会在下个版本详细说明)。

快速开发步骤

消息的定义

消息我们分三种:

   公共大厅的消息(这个由igate游戏平台实现)

   游戏大厅的消息(目前这个暂时不开放)

   游戏房间的消息

因此游戏需要定义的是游戏房间里的消息.

如何定义消息

例子:

MSG_TYPE_SCPLAYERINFO=0x0001

MSG_TYPE_SCMANYPLAYERS=0x0002

msg_define_map={

   "sc_player_info":

{

     "uid":

"I",

     "name":

"s",

     "_type":

MSG_TYPE_SCPLAYERINFO,

   },

   "sc_many_players":

{

     "myuid":

"I",

     "playerlist":

"sc_player_info",

     "_type":

MSG_TYPE_SCMANYPLAYERS,

   },

}所有房间的消息,定义在一个字典中,如例子中的"msg_define_map",字典中的每个元素,是一个消息.每个消息,包括消息名称(msg_define_map中的key)和它对应的消息定义(msg_define_map中该key对应的value).消息名称必须是字符串,比如例子中的"sc_player_info","sc_many_players".消息定义,是一个字典,它的key为此消息的各字段,必须为字符串,其中必须至少含有一个名为"_type"的字段."_type",是一个0x0000-0xFFFF的整型,是这个消息的消息编号,它的值必须唯一.key对应的value,是这个字段的消息类型.目前支持的类型有下表中的Format项:

Format

C Type

Python

b

signedchar

integer

B

unsignedchar

integer

h

short

integer

H

unsignedshort

integer

i

int

integer

I

unsignedint

long

l

long

integer

L

unsignedlong

long

q

longlong

long

Q

unsignedlonglong

long

f

float

float

d

double

float

s

char[]

string

p

char[]

string

当消息类型的字符串不在上述列表中定义的字段时,则被认为是自定义消息.自定义消息,格式为:

是一个list,list的每个元素为自定义消息类型.如例子中的"sc_many_players"消息的"playerlist"字段,格式为"sc_player_info",表示:

playerlist字段是一个list,每个元素都是"sc_player_info".

如何生成消息

定义好消息并初始化(调用hall_callback.register_game_room_msgdefine_and_callback初始化)之后,可通过hall_callback.get_game_room_msgmgr()获得消息管理器.

msgmgr=hall_callback.get_game_room_msgmgr()

然后可以通过消息管理器,生成消息.比如:

msg=msgmgr.sc_player_info(uid=1,name=’kiki’)

或者:

msg=msgmgr.sc_player_info()

msg.uid=1

msg.name=‘kiki’

通过msgmgr.XXXXX(xxxx是你定义的消息的名称),将得到一个消息对象.如果没有指定每个字段的初始值,每个字段都会赋予默认值(数字是0,字符串是’’).此消息对象有的字段就是你在消息中定义的字段.

如何发送消息

生成了消息对象msg之后,可以通过msg.to_string()得到字符串.

data=msg.to_string()

data即可通过网络接口发送给客户端。

游戏初始化

我们提供的接口中,hall_object,是一个房间的基类,需要你重载,以实现房间逻辑.hall_callback是初始化时提供给你的一些调用接口,以进行游戏初始化.

重载房间逻辑

实现房间逻辑,需要通过重载hall_object.HallRoom类来实现.

此类提供的接口,请查看相关接口文档.

服务器初始化

首先在开发目录下,创建一个名为room_extend.py的文件.在该文件中调用hall_init.use_hall():

importhall_init

hall_init.use_hall()

即可使用iGate游戏平台提供的公共服务.

你可以重写hall_callback.init,以实现服务器启动时做游戏的进程的初始化.在初始化中,你至少需要按顺序做以下两件事情:

1.设定房间逻辑的消息定义和相关的回调

  消息定义,则是上面介绍的msg_define_map

  相关回调是一个字典,消息类型作key,该消息对应的处理函数做value.其中,消息类型即msg_define_map中每个消息里的”_type”.处理函数的参数必须分别是:

room,player,msg.room,是该玩家所在的房间的对象,player是通过room.get_player_by_uid得到的对象,msg是客户端发来的消息对象。

假设已经定义了消息:

msg_define_map,定义了对应的处理函数:

event_callback_map.则可通过以下方式设定消息和回调:

hall_callback.register_game_room_msgdefine_and_callback(

msg_define_map,event_callback_map)

2.设定游戏模式和对应的房间类

游戏可以有多个模式,每个模式可以对应不同的房间类.通过以下方式设定:

hall_callback.set_class_define(class_define_map)

其中,class_define_map格式为:

{

gamemode:

(minnum,maxnum,roomclass),

}

key为游戏模式(int),value为(该房间的最小人数,最大人数,房间类)

设定后,当玩家要创建房间时,会根据指定的模式,生成相关的房间对象.

房间与大厅的交互说明

创建房间

(玩家主动请求创建,或系统主动创建)

根据创建房间的模式,创建你设定的房间类对象

玩家进入房间

"大厅"会调用room.on_player_enter_room函数

(此函数需要你重载)

收到客户端游戏消息

服务器会回调该消息的回调函数,传入的参数是:

room(该玩家所在房间对象)

player(通过room.get_player_by_hid取到的玩家对象)

msg(客户端发来的消息对象)

(消息回调函数是你在初始化时设定的)

玩家准备状态改变时

(如果你的游戏有”准备”这一概念时,才需要走这一步)

你需要主动调用:

room.set_player_ready

(主动调用,大厅就可以知道玩家当前状态)

游戏开始时

你需要主动调用room.set_game_start

(主动调用,大厅才知道此房间已经开始游戏,

游戏开始后,大厅就不会再让其他玩家进入此房间,

大厅中的玩家就会看到此房间的状态是”开始”状态)

游戏结束时

你需要主动调用room.set_game_end

(主动调用,大厅才知道此房间游戏没有开始,

游戏没开始,如果不满员,大厅就会允许其他玩家进入此房间,

大厅中的玩家就会看到此房间的状态是”等待”状态)

玩家主动离开房间

玩家主动离开此房间.

你需要主动调用room.tell_hall_player_leave_room以告知大厅.

(必须调用,这样大厅才知道玩家离开房间,回到大厅,

否则玩家在大厅的状态一直是:

“在房间中”,

会导致该玩家无法再进入任何游戏)

玩家被动离开房间

(比如玩家断线等,或游戏告知大厅玩家离开)

大厅会调用room.on_player_leave_room函数

(此函数需要你重载)

清空房间

当该房间的所有玩家都离开后

大厅会调用room.clean函数来清空

(根据需要重载clean函数,

以释放房间的相关资源,避免内存泄漏)

三、客户端详解

房间与大厅的交互说明

创建房间

(玩家主动请求创建,或系统主动创建)

根据创建房间的模式,创建你设定的房间类对象

玩家进入房间

"大厅"会调用room.on_player_enter_room函数

(此函数需要你重载)

收到客户端游戏消息

服务器会回调该消息的回调函数,传入的参数是:

room(该玩家所在房间对象)

player(通过room.get_player_by_hid取到的玩家对象)

msg(客户端发来的消息对象)

(消息回调函数是你在初始化时设定的)

玩家准备状态改变时

(如果你的游戏有”准备”这一概念时,才需要走这一步)

你需要主动调用:

room.set_player_ready

(主动调用,大厅就可以知道玩家当前状态)

游戏开始时

你需要主动调用room.set_game_start

(主动调用,大厅才知道此房间已经开始游戏,

游戏开始后,大厅就不会再让其他玩家进入此房间,

大厅中的玩家就会看到此房间的状态是”开始”状态)

游戏结束时

你需要主动调用room.set_game_end

(主动调用,大厅才知道此房间游戏没有开始,

游戏没开始,如果不满员,大厅就会允许其他玩家进入此房间,

大厅中的玩家就会看到此房间的状态是”等待”状态)

玩家主动离开房间

玩家主动离开此房间.

你需要主动调用room.tell_hall_player_leave_room以告知大厅.

(必须调用,这样大厅才知道玩家离开房间,回到大厅,

否则玩家在大厅的状态一直是:

“在房间中”,

会导致该玩家无法再进入任何游戏)

玩家被动离开房间

(比如玩家断线等,或游戏告知大厅玩家离开)

大厅会调用room.on_player_leave_room函数

(此函数需要你重载)

清空房间

当该房间的所有玩家都离开后

大厅会调用room.clean函数来清空

(根据需要重载clean函数,

以释放房间的相关资源,避免内存泄漏)

 

2DCoreObjects

2D引擎——把2D资源有机地组合在一起,2D资源包括静态图片(txg)、动画(sp2)、2D模型(2dm)、粒子。

基本元素

在2D引擎中,一切资源的使用都是以贴图为基础,而对于贴图的管理,则是用txg文件的方式管理,因此贴图是最基本的元素一张大的图片(tga),里面切割为若干个小图片。

txg文件内容如下:

 

  Version="0,0,1,0">

  

   

  

  

   

   

   

   

   

  

 

用法:

tg=render.texture_group(txg文件)

tex=tg.get_clip(Clip名字)#tex则为贴图对象。

静态图片

用法:

image=world2d.image2d("",tex)

动画

类似gif的动画形式,把每帧的图片按顺序播放。

sp2文件格式如下:

 

  

   

   

   

   

  

 

用法:

sprite=world2d.sprite2d(sp2文件)

2D模型

利用2D模型编辑器编辑出来的文件。

里面包含了挂接系统、轨迹系统、动作组合。

用法:

model=iworld2d.2dmodel(2dm文件)。

2D粒子系统

选定粒子贴图,选好参数,go!

场景(canvas)

一切2D对象,需要挂在场景上才能生效。

用法:

world2d.canvas.add_object(2dobj)

初始化时可以设置一共生成多少个背景层。

layer_id越大,越靠前,相同的layer_id,则以rlevel为准,rlevel越大越前,如果rlevel相同,则以生成顺序为准,越迟生成越前。

改变某个对象的层次,可以用obj.set_layer(layer_id),或者生成时的参数增加layer_id。

如果layer_id为None,则取中间的背景层。

镜头/坐标系

需要注意的是,image2d/sprite2d/模型都有key_point的,引擎的key_point默认是0,0,是在图片的中心点,通过iworld2d生成的图片对象,key_point已经改成左上角了。

可以控制镜头的位置,还有远近(也就是透视镜头的可视范围)。

用法:

world2d.canvas.view_region_center(位置)

world2d.canvas.view_region_size(大小)

编辑器

资源管理

首先建立2D资源目录,建议都放在项目名/res/world2d下其中再分:

基本贴图资源——项目名/res/world2d/txg/...

sp2资源——项目名/res/world2d/sprite/...

模型资源——项目名/res/world2d/2dmodel/...

粒子资源——项目名/res/world2d/particles/...

image编辑器(txg)

把各种零散图片资源整合成一张大图,便于管理(支持格式bmp/jpg/png/tga/dds),输出是一张大图(tga/png/dds)和一个管理文件。

sprite编辑器(sp2)

把一个txg文件中的若干个clip按顺序组合在一起,每次播放一张。

2D模型编辑器(2dm)

可以添加image/sprite,并生成树状的挂接关系。

然后按关键帧的方式编辑好轨迹,组合成一套套动作。

2D粒子编辑器

实时生成2D粒子,通过调整粒子大小/时间/颜色/贴图/运动轨迹等等,变化出各种各样的粒子效果。

 

接口手册

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1