Unity3d 面向对象设计思想(六)(Unity3d网络异步数据)
在MonoBehavior类中有一个方法是StartCoroutine。里面要求的是一个接口为IEnumerator协同的返回值,
在Unity3d中,协同的作用是马上返回结果的。而不影响其它程序的运行,并非一直在等待协同的结果返回
你能够在协同程序内使用yiled来等待当前的程序运行完成。
然后再往程序的以下的代码运行。
使用协同的优点不是堵塞游戏线程的运行,可以让游戏流畅。
使用弱连网的游戏,我简易的封装了一个工具类,这样非常方便的进行网络数据的处理,
思路是一个半单例的模式,对外不开放,对本类进行对象创建。一个静态工厂方法+单例。
当然,里面还有非常多不足。对于一般的弱连网的游戏来说。已经够用了
using UnityEngine;
using System.Collections; public class Task { // 任务的优生等级
enum Advance {
Low = -1,
Normal,
Advance
} // 任务的类型
enum TaskType {
Netwowk = -77,
Local,
Message
} /// <summary>
/// 当前任务列表,任务的读取形式是先进后出
/// </summary>
BetterList<Task> ts; /// <summary>
/// 任务的单例
/// </summary>
private static Task instance;
public static Task Instance {
get
{
if(instance == null) {
instance = new Task();
}
return instance;
}
} public void StopIEnumerator () {
if (instance != null) {
instance = null;
ts = null;
}
} private Task () {
ts = new BetterList<Task> ();
ts.Clear ();
} /// <summary>
/// Initializes a new instance of the <see cref="Task"/> class.
/// </summary>
/// <param name="id">Identifier.</param>
/// <param name="param">Parameter.</param>
private Task(int id, object param) {
this.id = id;
this.param = param;
} /// <summary>
/// Creates the new task.
/// </summary>
/// <returns><c>true</c>, if new task was created, <c>false</c> otherwise.</returns>
/// <param name="id">Identifier.</param>
/// <param name="param">Parameter.</param>
public bool CreateNewTask(int id, object param) {
Task t = new Task (id, param);
ts.Add (t); return true;
} /// <summary>
/// The identifier.
/// </summary>
public int id; /// <summary>
/// The parameter.
/// </summary>
public object param; void addTask(Task t) {
if (t.id > 0) {
ts.Add (t);
}
} public IEnumerator doTask() { Debug.Log ("Size:" + ts.size);
//Debug.Log (RealTime.time);
if(ts.size > 0) { Task t = ts.Pop(); switch (t.id) {
case 77:
Debug.Log("ID:"+t.id+"TASK:"+t.param);
WWW www = new WWW("http://www.baidu.com");
yield return www;
//网络请求完毕后进行数据的分发
Debug.Log("www" + www.text);
// NGUITools.Broadcast();-> LocalDispatch
break;
case 88:
Debug.Log("ID:"+t.id+"TASK:"+t.param);
break;
case 99:
Debug.Log("ID:"+t.id+"TASK:"+t.param);
break;
default:
break; } // 不断的读取当前任务,直接任务所有完毕
//if(ts.size > 0) {
// Debug.Log("doTask");
// doTask();
//}
} //else {
// 当前没有任务时。等待3.5s
Debug.Log (RealTime.time);
//yield return new WaitForSeconds (3.5f);
//doTask();
//}
} }
这样,在须要有网络请求的地方。创建当前一实例,然后再创建一个新任务。启动unity3d的loop,
不断的读取任务。能够设定一个固定时间来读取任务
Unity3d 面向对象设计思想(六)(Unity3d网络异步数据)的更多相关文章
- 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景
最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...
- python 面向对象设计思想发展史
这篇主要说的是程序设计思想发展历史,分为概述和详细发展历史 一,概述 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的 指令和数 据.简单来 ...
- 面向对象设计思想和MVC设计模式
虽然之前学习Java时有接触过面向对象的设计思想,但因当时Java没学好.所以导致这两天讲php的面向对象设计时,感到没有头绪,这也反应了我练习少和逻辑能力的不足.而MVC设计思想 面向对象就是要将系 ...
- linux VFS 之一 :虚拟文件系统的面向对象设计思想
VFS的面向对象的思想,如下图: VFS在上层用户空间的进程与底层特定文件系统之间起到一个承上启下的作用, 对上:封装标准的系统调用接口给用户空间app,user space app不必关心特定文件系 ...
- Effective C++ —— 继承与面向对象设计(六)
条款32 : 确定你的public继承塑模出is-a关系 以C++进行面向对象编程,最重要的一个规则是:public inheritance(公开继承)意味“is-a”(是一种)的关系.请务必牢记.当 ...
- 一、利用Python编写飞机大战游戏-面向对象设计思想
相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...
- [转载]面向对象设计(OOD)思想(C#)
有了思想才能飞翔,缺乏灵活就象少了轮子的汽车,难以飞奔.为了更好的理解设计思想,结合一个尽可能简洁的实例来说明OOD.设计模式及重构.通过下面的代码,详细地阐述面向对象设计思想. 一.传统过程化设计思 ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- Unity3D架构设计NavMesh寻路
Unity3D架构设计NavMesh寻路 发表于2013年10月6日由陆泽西 国庆闲来没事把NavMesh巩固一下.以Unity3D引擎为例写一个底层c# NavMesh寻路.因为Unity3D中本身 ...
随机推荐
- uboot中断功能实现
uboot中实现irq中断(uboot version2015.04)1.实验目的:实现GPIO_2的外部中断 2.实验步骤:a.GPIO_2(GPIO1_IO02)为中断源, 首先需要设置这个pad ...
- ubus
openwrt提供了一个系统总线ubus,类似linux桌面操作系统的d-bus,目标是提供系统级的进程间通信(IPC)功能. 为了提供各种后台进程和应用程序之间的通信机制,ubus被开发出来,由3部 ...
- hdu 3836 Equivalent Sets(强连通分量--加边)
Equivalent Sets Time Limit: 12000/4000 MS (Java/Others) Memory Limit: 104857/104857 K (Java/Other ...
- Muller’s method (website)
Muller's method: https://www.youtube.com/watch?v=3R8NY-trJwI :https://www.youtube.com/watch?v=p4vt7D ...
- How to convert from BufferedImage to JavaFX 2.2 Image
http://blog.idrsolutions.com/2012/11/convert-bufferedimage-to-javafx-image/ ———————————————————————— ...
- 破解idea注册码
添加 “0.0.0.0 account.jetbrains.com”到host, hosts位置:C:\Windows\System32\drivers\etc 获取注册码网址: http://ide ...
- 【BZOJ】3394: [Usaco2009 Jan]Best Spot 最佳牧场(floyd)
http://www.lydsy.com/JudgeOnline/problem.php?id=3394 裸的floyd.. #include <cstdio> #include < ...
- EasyUI简单CRUD
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- Java线程工作内存与主内存变量交换过程及volatile关键字理解
Java线程工作内存与主内存变量交换过程及volatile关键字理解 1. Java内存模型规定在多线程情况下,线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行.此处的所谓内存模 ...
- 天地币:所用到的 Android Socket 通讯编程技术试验
1.为了开发"天地币"这个Android手机项目,须要用到Socket编程. 2.天地币是一种类似于比特币的虚拟货币. 3.为了赚取CSDN的C币,须要写篇博客. 4.干脆将调试S ...