3D游戏图形网络游戏程序设计

2020-03-01 130浏览

  • 1.网络游戏程序设计
  • 2.教学目标  网络游戏的基本架构  网络游戏的基本协议 编程  网络游戏客户端设计  网络游戏服务器端设计  Socket
  • 3.网络游戏的结构解析 (1)  Peer to Peer /floating server  在多个玩家参与的游戏中,其中一个玩家的机器既是客户端,又扮演服务器的 角色   通常由创建游戏局的玩家担任服务器 ( 主机 ) 。 很多对战型的 RTS 网络游戏都采用这种结构
  • 4.网络游戏的结构解析 (2)  游戏大厅代理结 构 会话大厅 结构,为不同玩 家牵线搭桥。  既直接管理客户 端,也管理游戏 局  回合制游戏常见 类型 Lobby:
  • 5.网络游戏的结构解析 (3)  C-S 结构  多人在线游戏, RPG 。 成千上万人进行同一 场游戏。  服务器上有完整的游 戏世界模型,玩家在 客户端去观察这个世 界,并与之互动。  玩家和游戏等什么都 管
  • 6.网络游戏的结构解析 (4)  在进进 行网 进 进进 游进进 开进进进 ,最重要的是 进 进 进 进 进 进进 计思想、 进进进 框架进 构、数据 进 进 进进进 进进 等  游戏内容和引擎模块分离开来。  网络应用程序框架  要分清楚一般的多人游戏( multi-player gam e )和大规模在线游戏( massively online gam e)
  • 7.网络游戏的结构解析 (5)  游戏与一般网络应用程序
  • 8.网络游戏的结构解析 (6)  游戏通讯传输的体系结 构    封装层:实现基本数据类 型的读写操作; 传输层:数据压缩和加密 ,提供数据缓冲区以及各 种统计数据。 应用层:发送和接受封装 好的数据包。
  • 9.网络游戏的结构解析 (7)  数据资源管理  游戏中有 很多可重复使用的资源  有效的资源管理可以减少内存和载入时间,甚至可以减 少计算量  使用统一的方法和公共接口来管理和访问这些资 源   对用户隐藏实现的细节,管理程序对用户透明。用户不 需要知道数据从本地文件或者网络缓冲区中来的。安全 和快速。 提供资源的缓冲池管理。添加一个缓冲池,不立即删除 引用为 0 的资源。缓冲池的淘汰算法。
  • 10.网络游戏的结构解析 (8)  回合制游戏功能示例
  • 11.网络游戏的结构解析 (9)  网络 在回 合制 游戏 中的 功能 和作 用 战斗开始 回合开始 回合结束 战斗结束 服务器端: 战斗信息和所 有角色数据发往客户端; 客户端:设置战士的状 态,场景,角色,位置和 镜头 服务器端: 收集玩家的战 斗方式,并按行动次序计 算攻击伤害和更新属性; 客户端:选择战斗方式, 并通知服务器 服务器端: 把战斗方式、 属性的改变以及战斗结果 发挥客户端: 客户端:更新画面和数 值,并通知服务器 服务器:收到回合结束信 息,开始新的回合 服务器端: 胜负已经分 出,则进入结束战斗,计 算经验值和物体装备等, 是否升级,并把结果返回 客户端。 客户端:收到战斗结果 后,更新画面和属性
  • 12.网络及网络游戏的协议 (1)  TCP  有连接  可靠  按发送次序接受  UDP  无连接  不可靠  任意到达次序
  • 13.网络及网络游戏的协议 (2)  Send (发送) -Receive (接受) -Acknowledge (确 认) Sender Send Receiver Receive Acknowledge   发送确认  Sender holds sent packet until ACK is received 重新发送  Sender retransmits if ACK takes too long
  • 14.网络及网络游戏的协议 (3)  TCP 发送流程  Sends data and Puts it in send queue  Sets timer on this queue item  If timer expires, and no ACK, re-send data • Set another, longer timer • Exponentially increasing time  When ACK received • If this queue slot is the oldest, • Free the slot for new data  If no queue space, sender app waits!
  • 15.网络及网络游戏的协议 (4)  TCP 发送流程  Receiver maintains a queue the same size as the sender’s  When a packet arrives, send ACK  If the packet is next in sequence • Give it to application  Else Keep it in queue • earlier packet is on its way
  • 16.网络及网络游戏的协议 (5)  TCP 确认处理  If no ACKS arrive for a long enough time • Temporarily gives up • Sends test packets  When test packets get through • Starts slow, builds up
  • 17.网络及网络游戏的协议 (6)  UDP 的特性  Connectionless! • No underlying data to maintain  Unreliable transmission • If you lose a packet, you have to handle it  Out-of-order arrival • You have to handle that, too!  Fast • When the port gets the data, the app gets it
  • 18.网络及网络游戏的协议 (7)  UDP 的注意点  Packets will drop! • 1 in 5  Have to do your own re-send  Some packets are time sensitive • Care little about the past ship location  No header compression • May end up with greater overhead than TCP with PPP
  • 19.网络及网络游戏的协议 (8)  网络游戏协议  游戏协议的概念就是在网络游戏中客户机和 服务器通过预先设定好的格式传输数据发出 的请求和应答,从而实现控制和传输游戏数 据的目的。  为方便客户端程序和服务器端服务程序解释 ,同时有利于扩充协议,在客户端和服务器 端都定义了协议文本。 • 主要传输操作代码  操作代码就是本次数据包传输的数据所代表 的操作类型。 • 分为客户端代码和服务器代码。
  • 20.网络及网络游戏的协议 (9)  游进 进 进 进 的分 进进进 :  管理操作类协议  游戏大厅类协议  游戏动作协议(如打牌类协议)  旁观类协议
  • 21.Socket 编程技术( 1 ) • 网络编程接口的基本功能要求 – 资源分配: • Allocate local resources for communication – 通讯端指定: • Specify local and remote communication endpoints – 初始化连接(客户端) • Initiate a connection (client side) – 等待连接(服务器端) • Wait for an incoming connection (server side) – 发送和接受数据 – 决定数据的到达 • Determine when data arrives
  • 22.Socket 编程技术( 2 ) • 网络编程接口的基本功能要求(续) – 产生紧急数据 • Generate urgent data – 处理到达的紧急数据 • Handle incoming urgent data – 结束连接 • Terminate a connection gracefully – 处理远程连接结束请求 • Handle connection termination from the remote side – 异常通讯处理 • Abort communication – 异常连接处理 • Handle error conditions or a connection abort – 释放本地资源 • Release local resources when communication finishes.
  • 23.Socket 编程技术( 3 ) • Socket 编程模式 – 至少需要一对,一个是客户端的 ClientSocket ; 另一个是服务器端的 ServerSocket. • Socket 的连接过程可分为 3 个步骤: – 服务器监听,客户端请求,连接确认。 – 服务器监听:处于等待连接状态,实时监控网络 – 客户端请求:客户端 socket 请求连接服务器端的 socket( 地址,端口 )
  • 24.Socket 编程技术( 4 ) • Socket 的 APIs – Socket 的启动与中止 ---wsastartup(); wsacleanup() – Socket 的创建 ---Socket() 和 WSASocket() – 指定本地地址— Bind() – 建立连接 ----connect(), WSAConnect() – 监听连接 ---Listen()
  • 25.Socket 编程技术( 5 ) • Socket 的 APIs (续) – 接受连接请求 -----accept() 和 WSAaccept() – 数据发送 ---send()(TCP 协议 ) 和 sendto() ( UDP 协议) – 数据接收 ---recv() ( TCP 协议)和 recvfrom() ( UDP 协议) – I/O 多路复用 ----select() – 中断连接 ---closeSocket() 和 shutdown()
  • 26.Socket 编程技术( 6 ) • 客户端的流程 客户端 WSAStartup socket connect send recv closesocket WSACleanup
  • 27.Socket 编程技术( 7 ) • 服务器端 服务器端 WSAStartup socket bind listen accept recv send closesocket WSACleanup
  • 28.Socket 编程技术( 8 ) • 可封装成以下操作: – – – – – – – – – – 发送数据 接受数据 进求进进接 接受连接 开始监听 绑定地址 可读判断 可写判断 进进进接 设置非阻塞状态 • Socket 工作在阻塞状态下,会一直等 I/O 操作完成。
  • 29.基于网络的游戏设计 (1) • 网络游戏客户端设计 游戏的基本功能:处理声音,动画等; 游戏框架:玩家信息,游戏界面,广告信息等 游戏通讯:客户与服务器之间的网络传输细节 游戏应用程序:程序线程管理、各种显示对话框、 图形的处理与显示 – 游戏处理:处理游戏逻辑、解析和处理游戏数据、 游戏运行维护等 – – – –
  • 30.基于网络的游戏设计 (2) • 网络游戏服务器端设计: – 游戏通信:负责游戏中客户服务器之间的网 络传输细节 – 游戏协议:对传递的数据进行打包和解包, 并根据所包含的指令进行相应的操作 – 游戏逻辑:负责处理游戏逻辑 – 进程 管理: 进进程的生成、 进 进 进 进 进进束和分配任 进 进 进 进 进进等
  • 31.基于网络的游戏设计 (3) • 网络游戏运行数据进行交互时,所传输的数据是按照一定的格式 。 • 服务器数据库的内容示例: – 角色表: • 角色 ID ,账号 ID ,角色的名称,属性和帮派等 – 道具表: • 道具 ID ,所属角色 ID ,道具各类属性等 – 帮派表: • 帮派 ID, 名称,帮派头目,介绍,总人数等 – 进件 表: • 邮件 ID, 进件 人角色ID, 收件人角色 ID, 邮件内容等
  • 32.基于网络的游戏设计 (4) • 编写网络程序 – 根据已有的应用层 协议编写程序,如 http 或者 ftp. 只要 客进 端 和 服 器都按 进 进 进 进 进 进 写,就可以通信。 进进进 进进 进进 进进 • 注意网络字节顺序,一种是以纯字符形式进行解释,一种是按 位进行解释。 – 自定义通信进 进 。 进 • 游戏数据的传输格式 – 低位字节存储在起始地址 – 高位字节存储在起始地址
  • 33.基于网络的游戏设计 (5) • 游戏的运营与管理 – – – – 客户端下载和安装 会员注册 WEB 大厅管理 客户端管理 • • • • 身份验证 房间 用户信息 广告
  • 34.基于网络的游戏设计 (6) • 回合制游戏(客户端)示例 – 启动界面 • 用户登陆 • 代理服务器设置 – 游戏大厅 • 游戏目录 • 系统信息 – 游戏房间 • 游戏桌、站点列表、用户列表、聊天 • 邀请参加游戏、创建游戏 – 游戏牌局 • 加入游戏、等待掉线玩家、退出游戏等