网易ITOWN平台架构Word格式.docx
- 文档编号:18897339
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:14
- 大小:162.59KB
网易ITOWN平台架构Word格式.docx
《网易ITOWN平台架构Word格式.docx》由会员分享,可在线阅读,更多相关《网易ITOWN平台架构Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
数据存储,我们分两部分,一部分是平台提供的数据,一部分是游戏的数据。
其中,游戏的数据,我们提供基本数据存储,如果存储空间不够,支持游戏自己建表。
平台提供以下数据,供游戏共享:
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"
playerlist"
MSG_TYPE_SCMANYPLAYERS,
},
}所有房间的消息,定义在一个字典中,如例子中的"
msg_define_map"
字典中的每个元素,是一个消息.每个消息,包括消息名称(msg_define_map中的key)和它对应的消息定义(msg_define_map中该key对应的value).消息名称必须是字符串,比如例子中的"
"
.消息定义,是一个字典,它的key为此消息的各字段,必须为字符串,其中必须至少含有一个名为"
的字段."
是一个0x0000-0xFFFF的整型,是这个消息的消息编号,它的值必须唯一.key对应的value,是这个字段的消息类型.目前支持的类型有下表中的Format项:
Format
C Type
Python
b
signedchar
integer
B
unsignedchar
h
short
H
unsignedshort
i
int
I
unsignedint
long
l
L
unsignedlong
q
longlong
Q
unsignedlonglong
f
float
d
double
s
char[]
string
p
当消息类型的字符串不在上述列表中定义的字段时,则被认为是自定义消息.自定义消息,格式为:
是一个list,list的每个元素为自定义消息类型.如例子中的"
消息的"
字段,格式为"
表示:
playerlist字段是一个list,每个元素都是"
.
如何生成消息
定义好消息并初始化(调用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函数,
以释放房间的相关资源,避免内存泄漏)
三、客户端详解
2DCoreObjects
2D引擎——把2D资源有机地组合在一起,2D资源包括静态图片(txg)、动画(sp2)、2D模型(2dm)、粒子。
基本元素
在2D引擎中,一切资源的使用都是以贴图为基础,而对于贴图的管理,则是用txg文件的方式管理,因此贴图是最基本的元素一张大的图片(tga),里面切割为若干个小图片。
txg文件内容如下:
<
NeoX>
<
TextureGroup
Version="
0,0,1,0"
>
<
Textures>
<
TextureName="
pea"
Filename="
pea.tga"
/>
/Textures>
Clips>
ClipName="
FirePea"
TexName="
Pos="
184,4"
Size="
38,38"
/>
FirePea_flame1"
124,4"
58,39"
FirePea_flame2"
64,4"
FirePea_flame3"
4,4"
FirePea_spark"
224,4"
18,15"
/Clips>
/TextureGroup>
/NeoX>
用法:
tg=render.texture_group(txg文件)
tex=tg.get_clip(Clip名字)#tex则为贴图对象。
静态图片
image=world2d.image2d("
tex)
动画
类似gif的动画形式,把每帧的图片按顺序播放。
sp2文件格式如下:
SpriteVersion="
SequenceTextureFile="
res\\tex_group.txg"
Time="
1000"
Pos="
0,0"
Scale="
1"
PlayOnce="
true"
FrameClip="
ui010"
ui011"
ui012"
ui013"
/Sequence>
/Sprite>
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粒子,通过调整粒子大小/时间/颜色/贴图/运动轨迹等等,变化出各种各样的粒子效果。
接口手册
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网易 ITOWN 平台 架构