XNA创建简单局域网游戏
2012-05-23 15:22
211 查看
XNA是微软推出的一个基于DirectX的.net平台游戏开发框架,用来开发XBOX和Windows桌面的游戏,后被移植到了 silverlight和windows phone上。内部是一个game loop,不同于事件驱动模式,但也不难掌握,性能方面还是不错的。下面就用XNA创建一个简单的局域网游戏。
网络连接无外乎就是那么几个阶段,连接-发送、接收数据-断开。
用到的几个主要的类是:
游戏开始需要有一个人来创建一个session,然后有人来加入到你创建的游戏当中来。
创建游戏session:
加入游戏:
加入到游戏session之后就开是玩家之间进行数据的传输和接收了。
在接收到数据之后就可以在Update方法中写游戏逻辑,最后Draw方法也很简单。
代码都很简单,一看就懂,感兴趣的朋友可以自己去找些资料来看。
网络连接无外乎就是那么几个阶段,连接-发送、接收数据-断开。
用到的几个主要的类是:
using Microsoft.Xna.Framework.Net; //网络连接会话类 NetworkSession networkSession; //发送packet的类 PacketWriter packetWriter = new PacketWriter(); //读取packet的类 PacketReader packetReader = new PacketReader();
游戏开始需要有一个人来创建一个session,然后有人来加入到你创建的游戏当中来。
创建游戏session:
// 创建一个session,最大人数2 networkSession = NetworkSession.Create(NetworkSessionType.SystemLink, 1, 2); networkSession.AllowHostMigration = true; networkSession.AllowJoinInProgress = false; //绑定join和left时间 networkSession.GamerJoined += GamerJoined; networkSession.GamerLeft += GamerLeft; void GamerJoined(object sender, GamerJoinedEventArgs e) { //tag是一个object类型的容器,用来保存用户自定义的信息。 e.Gamer.Tag = new entity; } void GamerLeft(object sender, GamerLeftEventArgs e) { networkSession.Dispose(); networkSession = null; }
加入游戏:
// 查找是否存在游戏session AvailableNetworkSessionCollection sessions = NetworkSession.Find(NetworkSessionType.SystemLink, 1, null); if (sessions.Count > 0) { //如果session存在,就加入到这个session中 networkSession = NetworkSession.Join(sessions[0]); //绑定join和left事件,同上 networkSession.GamerJoined += GamerJoined; networkSession.GamerLeft += GamerLeft; }
加入到游戏session之后就开是玩家之间进行数据的传输和接收了。
protected void UpdateLocalPlayer(GameTime gameTime) { // 获取本地玩家 LocalNetworkGamer localGamer = networkSession.LocalGamers[0]; // 获取上面绑定到tag中的entity entity sprite = (entity )localGamer.Tag; // 写入数据到packetWriter中 packetWriter.Write((int)1); packetWriter.Write(Vector.Zero); // 发送数据 localGamer.SendData(packetWriter, SendDataOptions.InOrder); }
protected void ProcessIncomingData(GameTime gameTime) { // 获取玩家 LocalNetworkGamer localGamer = networkSession.LocalGamers[0]; //是否有数据可读取 while (localGamer.IsDataAvailable) { //接收数据 NetworkGamer sender; localGamer.ReceiveData(packetReader, out sender); //忽略到自己发送的数据 if (!sender.IsLocal) { //读取数据到packetReader中 MessageType messageType = (int)packetReader.ReadInt32(); } foreach (NetworkGamer gamer in networkSession.AllGamers) { if (!gamer.IsLocal) { //获取绑定到tag中的实体 entity _e= ((entity)gamer.Tag); //读取packetReader中的数据 Vector2 Pos = packetReader.ReadVector2(); } //add some game logic here } } }
在接收到数据之后就可以在Update方法中写游戏逻辑,最后Draw方法也很简单。
// 循环所有游戏玩家 foreach (NetworkGamer gamer in networkSession.AllGamers) { //调用entity中的draw方法 entity sprite = ((entity)gamer.Tag); sprite.Draw(gameTime, spriteBatch); }
代码都很简单,一看就懂,感兴趣的朋友可以自己去找些资料来看。
相关文章推荐
- 本文将引导你使用XNA Game Studio Express一步一步地创建一个简单的游戏
- Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏
- C#游戏编程之创建一个简单的卷轴射击游戏
- 使用 Spirit 类在 XNA 中创建游戏中的基本单位精灵(十三)
- Unity3D游戏开发 创建简单的游戏世界(三)
- BLUI:创建游戏 UI 的简单方法
- 为 Xna 游戏创建漂亮的字体
- 创建XNA Shooter游戏——XNA Shooter游戏
- Unity3D 创建一个简单的2D游戏
- C#游戏编程之创建一个简单的卷轴射击游戏
- 创建XNA Shooter游戏——挑战:用引擎编写自己的游戏
- tensorflow4:创建一个简单的强化学习游戏
- 创建XNA Shooter游戏——总结
- Unity3D 创建一个简单的2D游戏
- WatchKit入门:创建一个简单的猜数游戏
- 【Iphone 游戏开发之一】创建视图并绘制简单图形
- XNA Game Studio是一套有着强大功能和简单界面的游戏制作平台,游戏开发商和游戏玩家都可以使用这套工具开发针对Windows XP以及Xbox360的游戏,XNA Game Studio分为两种版本,一种是面向初学者的EXPRESS版本,还有一种
- C# XNA 简单的 迷宫游戏
- 如何写一个简单的局域网游戏
- 【Iphone 游戏开发之一】创建视图并绘制简单图形