现在的位置: 首页 > 综合 > 正文

Photon官方Lite类中Lite Concepts

2019年07月22日 ⁄ 综合 ⁄ 共 2136字 ⁄ 字号 评论关闭

Lite Concepts

Peer

Lite是基于应用程序框架,用于Photon和也使用“Peer”作为引用连接播放器。这是包裹在类LitePeer和扩展。

当一个客户端连接到Lite应用程序,一个新的LitePeer LiteApplication.CreatePeer中创建。进一步的请求,客户端(例如。操作)现在将由相应的LitePeer。

在Lite,每一个Peer都有一个唯一的RoomReference状态。玩家可以仅在单个Room。当玩家加入时创建这个状态。

在LitePeer OnDisconnect的方法时,将调用一个断开方法Peer Disconnnect。如果对方仍在一个Room里,这得到了一个消息删除Peer。

 

Rooms

在Lite,Peers进入Room一起玩,这就是为什么他们也称为游戏。Room要为所有事负责。一切除了加入,就是它。

每个游戏都有一个唯一的名称,并被视为完全脱离了任何其他。同时,每个请求来自一个Player处理序列。因为许多Room并行存在,每个请求都很好地处理,这种设置良好的可扩展性。

Room有Player的名单在加入,离开或断开时更新。这些Players之间,可以发送事件。

在一个Room,一个PLayer也被称为演员,每个Actor都有一个ActorNumber。这个数字是用来标记一个事件的起源。

 

Operations and Events

Lite定义这些操作

•Join:进入任何Room(通过名字)。如果它不存在则创建。加入将默认离开先前的Room的一个Peer(如果有的话)。返回指定ActorNumber。

•Leave:离开Room(但保持连接)。

•RaiseEvent:告诉Room去发送一个事件给每个Peer。事件有一个EventCode,可以携带数据由客户提供。Lite并不存储事件。

•GetProperties:Lite,属性可以被附加到Room和Player。这个操作,他们都被获取。

SetProperties:高度任意键值对roRoom或一个Player。Lite不使用数据,所以客户端可以发送任意数据沿。代码按照惯例。

Lite定义了这些事件

•Join: 加入一个Room(通过操作)更新Player名单。这是发送给所有的玩家在一个事件(包括新的)。

•Leave:如果一个Player离开一个Room的,其余的是再次更新。

Properties update当属性被更改,有一个选项广播更新。这个事件负责每个客户端是最新的。

RaiseEvent/自定义事件

在Room里Lite,Player可以与发送任意内容的事件给其他Player。操作RaiseEvent负责这和转发相应事件内容。

作为一个例子,这个客户端代码与DotNet实时演示发送一个Player的位置:

// Raises an event with the position data of this player.

internalvoidSendEvMove(LitePeer peer)
{
if(peer == null)
{
	return;

}
Hashtable evInfo = newHashtable();
evInfo.Add((byte)STATUS_PLAYER_POS_X, (byte)this.posX);
evInfo.Add((byte)STATUS_PLAYER_POS_Y, (byte)this.posY);

//OpRaiseEvent(byte eventCode, Hashtable evData, bool sendReliable, bytechannelId, bool encrypt)
peer.OpRaiseEvent(EV_MOVE, evInfo, isSendReliable, (byte)0,Game.RaiseEncrypted);
}

 

 

在客户端有一个接收事件的方法EventAction

//in Game.cs:

publicvoidEventAction(byteeventCode, Hashtable photonEvent)

{

intactorNr = 0;

if(photonEvent.ContainsKey((byte)LiteEventKey.ActorNr))

{

actorNr = (int) photonEvent[(byte) LiteEventKey.ActorNr];

}

// get the player that raised this event

Player p;

this.Players.TryGetValue(actorNr, outp);

switch(eventCode)

{

casePlayer.EV_MOVE:

p.SetPosition((Hashtable)photonEvent[(byte)LiteEventKey.Data]);

break;

}

}

//in Player.cs:

internal void SetPosition(Hashtable evData)
{
this.posX = (byte)evData[(byte)STATUS_PLAYER_POS_X];
this.posY = (byte)evData[(byte)STATUS_PLAYER_POS_Y];
}


抱歉!评论已关闭.