目前市面上已经有很多游戏采用了把图片缓存到玩家客户端的做法,这种方法有利有弊,因为并不是所有的玩家都希望自己的电脑的某个角落被放入过多的缓存文件,久而久之造成电脑性能下降;但是总的来说这种技术还是好的:第一,webgame的总体资源也是有限的,不会有太大的容量占用,而且对于程序来说一般只缓存一些核心资源,比如使用很频繁的资源以及需要下载较长时间的大背景大图片或者容量稍大的swf文件等;第二,可以大幅度提升玩家第二次进入游戏的速度,某种意义上可以提升游戏体验度;

好了,废话少说,下面直接说说怎么使用SharedObject来做到把图片或者swf文件缓存到客户端,并在第二次进入程序的时候直接使用缓存的数据还原成想要的原始图片或者swf文件;主要思想是:通过URLStream把显示对象加载进来获得其ByteArra的原始数据,然后通过shareObject把二进制保存到客户端的本地,那么下次进入程序的时候直接可以通过ShareObject获得上次保存的二进制数据,有了二进制数据,只需要通过Loader.loadByte()函数就可以把二进制数据转换成DisplayObject对象;

1.首先我们使用SharedObject来写一个Cookie类:Cookie.as的代码如下:

[java] view plaincopyprint?
  1. // WEBGAME Confidential
  2. // Copyright 2011. All rights reserved.
  3. //
  4. // Cookie.as
  5. // Summary // TODO Auto-generated summary stub
  6. // Version 1.0
  7. // Author txiejun
  8. // Created Nov 4, 2011 10:46:36 PM
  9. package aurora.store
  10. {
  11. import flash.events.NetStatusEvent;
  12. import flash.net.SharedObject;
  13. import flash.net.SharedObjectFlushStatus;
  14. import flash.utils.getQualifiedClassName;
  15. /**
  16. *
  17. * @author txiejun
  18. * @contact txiejun@126.com
  19. * @created Nov 4, 2011 10:46:36 PM
  20. */
  21. public class Cookie
  22. {
  23. private var _name:String = null;
  24. private var _path:String = null;
  25. private var _shdobj:SharedObject;
  26. private var flushStatus:String = null;
  27. /**
  28. *  minDiskSpace KB 空间的存储量 小于 minDiskSpace的数量将不会有提示框弹出
  29. */
  30. public var minDiskSpace:int = 0;
  31. public function Cookie(name:String,path:String=null,minDiskSpace:int=0)
  32. {
  33. _name = name;
  34. _path = path;
  35. this.minDiskSpace = minDiskSpace;
  36. _shdobj = SharedObject.getLocal(name,_path);
  37. }
  38. private function onFlushStatus(event:NetStatusEvent):void
  39. {
  40. switch (event.info.code)
  41. {
  42. case "SharedObject.Flush.Failed":
  43. trace(getQualifiedClassName(this)+".onFlushStatus() Error: Failed write SharedObject to disk.");
  44. break;
  45. }
  46. _shdobj.removeEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
  47. }
  48. private function flushValue():void
  49. {
  50. flushStatus =null;
  51. try
  52. {
  53. flushStatus = _shdobj.flush(minDiskSpace);
  54. }
  55. catch (error:Error)
  56. {
  57. trace(getQualifiedClassName(this)+".setCookie() Error: Could not write SharedObject to disk.");
  58. }
  59. if(flushStatus != null)
  60. {
  61. switch(flushStatus)
  62. {
  63. case SharedObjectFlushStatus.PENDING:
  64. trace(getQualifiedClassName(this)+".setCookie() Requesting permission to save value.");
  65. _shdobj.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
  66. break;
  67. }
  68. }
  69. }
  70. public function getName():String
  71. {
  72. return _name;
  73. }
  74. public function getPath():String
  75. {
  76. return _path;
  77. }
  78. /**
  79. *  如果value==null 意味着删除此key
  80. *  如果此Key已经有值了,则原来的值被替换,并返回原来的值
  81. * @param key
  82. * @param value
  83. * @return
  84. *
  85. */
  86. public function setData(key:String,value:*):*
  87. {
  88. if(key == null)
  89. {
  90. throw new ArgumentError("cannot put a value with undefined or null key!");
  91. return undefined;
  92. }
  93. else if(value == null)
  94. {
  95. return remove(key);
  96. }
  97. else
  98. {
  99. var oldValue:* = getData(key);
  100. _shdobj.data[key]=value;
  101. flushValue();
  102. return oldValue;
  103. }
  104. }
  105. public function getData(key:String):*
  106. {
  107. if(!hasKey(key))
  108. {
  109. return undefined;
  110. }
  111. else
  112. {
  113. return _shdobj.data[key];
  114. }
  115. }
  116. public function remove(key:*):*
  117. {
  118. if(!hasKey(key))
  119. {
  120. return null;
  121. }
  122. var temp:* = _shdobj.data[key];
  123. delete _shdobj.data[key];
  124. return temp;
  125. }
  126. public function hasData(key:String):Boolean
  127. {
  128. if(!hasKey(key))
  129. {
  130. return false;
  131. }
  132. else
  133. {
  134. return _shdobj.data[key]!=null;
  135. }
  136. }
  137. public function hasKey(key:*):Boolean
  138. {
  139. return _shdobj.data.hasOwnProperty(key);
  140. }
  141. /**
  142. *  清除所有数据并从磁盘删除共享对象
  143. *
  144. */
  145. public function clear():void
  146. {
  147. _shdobj.clear();
  148. }
  149. }
  150. }

// WEBGAME Confidential // Copyright 2011. All rights reserved. // // Cookie.as // Summary // TODO Auto-generated summary stub // Version 1.0 // Author txiejun // Created Nov 4, 2011 10:46:36 PM package aurora.store { import flash.events.NetStatusEvent; import flash.net.SharedObject; import flash.net.SharedObjectFlushStatus; import flash.utils.getQualifiedClassName; /** * * @author txiejun * @contact txiejun@126.com * @created Nov 4, 2011 10:46:36 PM */ public class Cookie { private var _name:String = null; private var _path:String = null; private var _shdobj:SharedObject; private var flushStatus:String = null; /** * minDiskSpace KB 空间的存储量 小于 minDiskSpace的数量将不会有提示框弹出 */ public var minDiskSpace:int = 0; public function Cookie(name:String,path:String=null,minDiskSpace:int=0) { _name = name; _path = path; this.minDiskSpace = minDiskSpace; _shdobj = SharedObject.getLocal(name,_path); } private function onFlushStatus(event:NetStatusEvent):void { switch (event.info.code) { case "SharedObject.Flush.Failed": trace(getQualifiedClassName(this)+".onFlushStatus() Error: Failed write SharedObject to disk."); break; } _shdobj.removeEventListener(NetStatusEvent.NET_STATUS, onFlushStatus); } private function flushValue():void { flushStatus =null; try { flushStatus = _shdobj.flush(minDiskSpace); } catch (error:Error) { trace(getQualifiedClassName(this)+".setCookie() Error: Could not write SharedObject to disk."); } if(flushStatus != null) { switch(flushStatus) { case SharedObjectFlushStatus.PENDING: trace(getQualifiedClassName(this)+".setCookie() Requesting permission to save value."); _shdobj.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus); break; } } } public function getName():String { return _name; } public function getPath():String { return _path; } /** * 如果value==null 意味着删除此key * 如果此Key已经有值了,则原来的值被替换,并返回原来的值 * @param key * @param value * @return * */ public function setData(key:String,value:*):* { if(key == null) { throw new ArgumentError("cannot put a value with undefined or null key!"); return undefined; } else if(value == null) { return remove(key); } else { var oldValue:* = getData(key); _shdobj.data[key]=value; flushValue(); return oldValue; } } public function getData(key:String):* { if(!hasKey(key)) { return undefined; } else { return _shdobj.data[key]; } } public function remove(key:*):* { if(!hasKey(key)) { return null; } var temp:* = _shdobj.data[key]; delete _shdobj.data[key]; return temp; } public function hasData(key:String):Boolean { if(!hasKey(key)) { return false; } else { return _shdobj.data[key]!=null; } } public function hasKey(key:*):Boolean { return _shdobj.data.hasOwnProperty(key); } /** * 清除所有数据并从磁盘删除共享对象 * */ public function clear():void { _shdobj.clear(); } } }

2.通过上面的cookie.as类可以实现像普通浏览器的cookie那样的功能 在本地写入或者读出数据,一般是二进制数据,int,String,Object,xml等格式;这是一个工具类;

下面再贡献一个BitmapUtil.as工具类 主要作用是用来把二进制byteArray数据装换成DisplayObject显示对象;或者把一张Bitmap转换成二进制格式的数据;

BitmapUtil.as代码如下:

[java] view plaincopyprint?
  1. // WEBGAME Confidential
  2. // Copyright 2011. All rights reserved.
  3. //
  4. // BitmapUtil.as
  5. // Summary // TODO Auto-generated summary stub
  6. // Version 1.0
  7. // Author txiejun
  8. // Created Nov 4, 2011 1:57:07 PM
  9. package aurora.graphic
  10. {
  11. import flash.display.Bitmap;
  12. import flash.display.BitmapData;
  13. import flash.display.DisplayObject;
  14. import flash.display.Loader;
  15. import flash.display.LoaderInfo;
  16. import flash.display.Sprite;
  17. import flash.events.Event;
  18. import flash.events.IOErrorEvent;
  19. import flash.geom.Matrix;
  20. import flash.utils.ByteArray;
  21. import flash.utils.getQualifiedClassName;
  22. /**
  23. *
  24. * @author txiejun
  25. * @contact txiejun@126.com
  26. * @created Nov 4, 2011 1:57:07 PM
  27. */
  28. public class BitmapUtil
  29. {
  30. public function BitmapUtil()
  31. {
  32. }
  33. /**
  34. *  把 ByteArray装换成DisplayObject
  35. * @param byteArray
  36. * @param callBack
  37. *
  38. */
  39. public static function toDisplayObject(byteArray:ByteArray,callBack:Function):void
  40. {
  41. if(byteArray==null)
  42. {
  43. if(callBack!=null)
  44. {
  45. callBack.call(null,null);
  46. }
  47. return;
  48. }
  49. var loader:Loader = new Loader();
  50. var onCompleteHandler:Function = function(event:Event):void
  51. {
  52. var loaderInfo:LoaderInfo = event.currentTarget as LoaderInfo;
  53. var content:DisplayObject = loaderInfo.content;
  54. loaderInfo.removeEventListener(Event.COMPLETE, onCompleteHandler);
  55. loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onIoErrorHandler);
  56. if(callBack!=null)
  57. {
  58. callBack.call(null,content);
  59. }
  60. loader = null;
  61. }
  62. var onIoErrorHandler:Function = function(event:IOErrorEvent):void
  63. {
  64. var loaderInfo:LoaderInfo = event.currentTarget as LoaderInfo;
  65. loaderInfo.removeEventListener(Event.COMPLETE, onCompleteHandler);
  66. loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onIoErrorHandler);
  67. trace(getQualifiedClassName(this)+".toDisplayObject() :"+event.text);
  68. if(callBack!=null)
  69. {
  70. callBack.call(null,null);
  71. }
  72. }
  73. loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
  74. loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIoErrorHandler);
  75. loader.loadBytes(byteArray);
  76. }
  77. }
  78. }

// WEBGAME Confidential // Copyright 2011. All rights reserved. // // BitmapUtil.as // Summary // TODO Auto-generated summary stub // Version 1.0 // Author txiejun // Created Nov 4, 2011 1:57:07 PM package aurora.graphic { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.geom.Matrix; import flash.utils.ByteArray; import flash.utils.getQualifiedClassName; /** * * @author txiejun * @contact txiejun@126.com * @created Nov 4, 2011 1:57:07 PM */ public class BitmapUtil { public function BitmapUtil() { } /** * 把 ByteArray装换成DisplayObject * @param byteArray * @param callBack * */ public static function toDisplayObject(byteArray:ByteArray,callBack:Function):void { if(byteArray==null) { if(callBack!=null) { callBack.call(null,null); } return; } var loader:Loader = new Loader(); var onCompleteHandler:Function = function(event:Event):void { var loaderInfo:LoaderInfo = event.currentTarget as LoaderInfo; var content:DisplayObject = loaderInfo.content; loaderInfo.removeEventListener(Event.COMPLETE, onCompleteHandler); loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onIoErrorHandler); if(callBack!=null) { callBack.call(null,content); } loader = null; } var onIoErrorHandler:Function = function(event:IOErrorEvent):void { var loaderInfo:LoaderInfo = event.currentTarget as LoaderInfo; loaderInfo.removeEventListener(Event.COMPLETE, onCompleteHandler); loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onIoErrorHandler); trace(getQualifiedClassName(this)+".toDisplayObject() :"+event.text); if(callBack!=null) { callBack.call(null,null); } } loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIoErrorHandler); loader.loadBytes(byteArray); } } }

这两个工具类写好了以后,就可以开始写主程序了;

ShareObjectTest.as文件如下:

[java] view plaincopyprint?
  1. // WEBGAME Confidential
  2. // Copyright 2011. All rights reserved.
  3. //
  4. // ShareObjectTest.as
  5. // Summary // TODO Auto-generated summary stub
  6. // Version 1.0
  7. // Author txiejun
  8. // Created Nov 5, 2011 12:31:10 AM
  9. package
  10. {
  11. import aurora.graphic.BitmapUtil;
  12. import aurora.store.Cookie;
  13. import flash.display.DisplayObject;
  14. import flash.display.Sprite;
  15. import flash.display.StageAlign;
  16. import flash.display.StageScaleMode;
  17. import flash.events.Event;
  18. import flash.events.IOErrorEvent;
  19. import flash.net.URLRequest;
  20. import flash.net.URLStream;
  21. import flash.utils.ByteArray;
  22. /**
  23. *
  24. * @author txiejun
  25. * @contact txiejun@126.com
  26. * @created Nov 5, 2011 12:31:10 AM
  27. */
  28. public class ShareObjectTest extends Sprite
  29. {
  30. private var assests:Array = ["mc_1.swf","img_1.png"];
  31. private var cookie:Cookie ;
  32. private var index:int = 1;
  33. public function ShareObjectTest()
  34. {
  35. super();
  36. if(stage)
  37. {
  38. stage.align = StageAlign.TOP_LEFT;
  39. stage.scaleMode = StageScaleMode.NO_SCALE;
  40. stage.stageFocusRect = false;
  41. }
  42. cookie = new Cookie("ShareObjectTest");
  43. //          cookie.clear();
  44. loadAssest(assests[index]);
  45. }
  46. private function loadAssest(url:String):void
  47. {
  48. //检查是否已经加载过资源
  49. if(cookie.hasData(url))
  50. {
  51. //获得缓存的二进制数据
  52. var byteArray:ByteArray = cookie.getData(url);
  53. //转换成显示对象
  54. BitmapUtil.toDisplayObject(byteArray,onLoaded);
  55. trace("url",url,"already loaded");
  56. }
  57. else
  58. {
  59. //加载二进制数据
  60. var urlstream:URLStream = new URLStream();
  61. urlstream.addEventListener(Event.COMPLETE,onStreamComplete);
  62. urlstream.addEventListener(IOErrorEvent.IO_ERROR,onIOError);
  63. urlstream.load(new URLRequest(url));
  64. trace("url",url,"need load");
  65. }
  66. }
  67. private function onLoaded(content:DisplayObject):void
  68. {
  69. this.addChild(content);
  70. content.x = index*100;
  71. content.y = index*50;
  72. trace("onLoaded ",assests[index]);
  73. }
  74. private function onStreamComplete(event:Event):void
  75. {
  76. var urlstream:URLStream = event.currentTarget as URLStream;
  77. urlstream.removeEventListener(Event.COMPLETE,onStreamComplete);
  78. urlstream.removeEventListener(IOErrorEvent.IO_ERROR,onIOError);
  79. var byteArray:ByteArray = new ByteArray();
  80. urlstream.readBytes(byteArray);
  81. //转换成显示对象
  82. BitmapUtil.toDisplayObject(byteArray,onLoaded);
  83. //保存二进制数据到本地客户端
  84. cookie.setData(assests[index],byteArray);
  85. trace("cookie.setData",assests[index]);
  86. }
  87. private function onIOError(event:IOErrorEvent):void
  88. {
  89. var urlstream:URLStream = event.currentTarget as URLStream;
  90. urlstream.removeEventListener(Event.COMPLETE,onStreamComplete);
  91. urlstream.removeEventListener(IOErrorEvent.IO_ERROR,onIOError);
  92. }
  93. }
  94. }

// WEBGAME Confidential // Copyright 2011. All rights reserved. // // ShareObjectTest.as // Summary // TODO Auto-generated summary stub // Version 1.0 // Author txiejun // Created Nov 5, 2011 12:31:10 AM package { import aurora.graphic.BitmapUtil; import aurora.store.Cookie; import flash.display.DisplayObject; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLRequest; import flash.net.URLStream; import flash.utils.ByteArray; /** * * @author txiejun * @contact txiejun@126.com * @created Nov 5, 2011 12:31:10 AM */ public class ShareObjectTest extends Sprite { private var assests:Array = ["mc_1.swf","img_1.png"]; private var cookie:Cookie ; private var index:int = 1; public function ShareObjectTest() { super(); if(stage) { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.stageFocusRect = false; } cookie = new Cookie("ShareObjectTest"); // cookie.clear(); loadAssest(assests[index]); } private function loadAssest(url:String):void { //检查是否已经加载过资源 if(cookie.hasData(url)) { //获得缓存的二进制数据 var byteArray:ByteArray = cookie.getData(url); //转换成显示对象 BitmapUtil.toDisplayObject(byteArray,onLoaded); trace("url",url,"already loaded"); } else { //加载二进制数据 var urlstream:URLStream = new URLStream(); urlstream.addEventListener(Event.COMPLETE,onStreamComplete); urlstream.addEventListener(IOErrorEvent.IO_ERROR,onIOError); urlstream.load(new URLRequest(url)); trace("url",url,"need load"); } } private function onLoaded(content:DisplayObject):void { this.addChild(content); content.x = index*100; content.y = index*50; trace("onLoaded ",assests[index]); } private function onStreamComplete(event:Event):void { var urlstream:URLStream = event.currentTarget as URLStream; urlstream.removeEventListener(Event.COMPLETE,onStreamComplete); urlstream.removeEventListener(IOErrorEvent.IO_ERROR,onIOError); var byteArray:ByteArray = new ByteArray(); urlstream.readBytes(byteArray); //转换成显示对象 BitmapUtil.toDisplayObject(byteArray,onLoaded); //保存二进制数据到本地客户端 cookie.setData(assests[index],byteArray); trace("cookie.setData",assests[index]); } private function onIOError(event:IOErrorEvent):void { var urlstream:URLStream = event.currentTarget as URLStream; urlstream.removeEventListener(Event.COMPLETE,onStreamComplete); urlstream.removeEventListener(IOErrorEvent.IO_ERROR,onIOError); } } } 通过上面的三个类就可以运行起来,这里还需要准备两张资源:分别是mc_1.swf和img_1.png 确定放置到正确的路径下面,然后运行程序:这儿可以通过ShareObjectTest里面的index来改变究竟要加载那种类型的资源以供你测试,你可以看到当你第一次运行这个程序的时候,他的执行结果trace类似于下面:

[java] view plaincopyprint?
  1. url img_1.png need load
  2. cookie.setData img_1.png
  3. onLoaded  img_1.png

url img_1.png need load cookie.setData img_1.png onLoaded img_1.png
但是第二次以后再运行的时候,得到的trace结果是:

[java] view plaincopyprint?
  1. url img_1.png already loaded
  2. onLoaded  img_1.png

url img_1.png already loaded onLoaded img_1.png
可以看出来,第二次是使用的缓存到客户端的二进制数据了,从而我们想要的效果已经达到!

转载于:https://www.cnblogs.com/psj2002/archive/2012/07/02/2573518.html

关于使用SharedObject来缓存游戏图片或者swf文件资源到客户端本地的研究相关推荐

  1. android h5游戏图片不缓存,H5小游戏资源缓存方法与流程

    本发明涉及H5资源缓存领域,尤其涉及H5小游戏资源缓存方法. 背景技术: 随着移动互联网的发展和手机硬件性能的不断提升,H5小游戏这种不需要下载安装即可使用的全新游戏应用得到了爆发式发展.这种用完即走 ...

  2. 一种网页游戏图片预加载方案

    一种网页游戏图片预加载方案 上个月我写了一篇关于网页游戏图片预加载技术的文章,叫<很山寨的网页游戏图片预加载技术>.这个方案用到项目上后,发现了一些问题,经过大家的努力,这些问题基本得到解 ...

  3. 很山寨的网页游戏图片预加载技术

    很山寨的网页游戏图片预加载技术 以下一种简单易懂,方便易用的网页图片预加载技术.:=D. 这种预加载技术使用了javascript技术.静态页面技术.div隐藏技术.gif动态图片技术.bash脚本技 ...

  4. flask html css文件更改后(谷歌)浏览器不及时更新样式文件怎么办?(ctrl+shift+delete清除缓存的图片和文件)

    如果是css文件更改后 以谷歌浏览器为例 按ctrl+shift+delete 清除缓存的图片和文件,再按f5刷新浏览器,搞定! 但是如果是html文件更改,就要重新启动一下后端flask程序了

  5. java 图片缓存工具,java缓存读取图片解决方案

    java缓存读取图片 老师布置了任务,需要把数据库中的图片一缓存的形式读出,不要说什么数据库中路劲,图片整体较大,在给别人使用时不现实. 关键代码:for(int i=0;i<1;i++){ d ...

  6. php中怎么让图片没有缓存文件,PHP页面文件缓存,PHP图片缓存实例

    PHP页面缓存了压缩过的文件,再次访问减少再压缩时间,降低CPU占用率.2,通过设置客户端文件缓存时间,降低再次请求次数,可降低85%以上.3,图片因为已经是压缩格式,只是设置浏览器缓存时间,不做压缩 ...

  7. 壁纸图片|2020年12月游戏图片大全

    2020年12月游戏图片大全 高图整理搜集了2020年12月发售游戏图片大全.包括热门游戏图片.游戏封面图片.游戏内容图片.电影类别分为动作游戏.竞速游戏.冒险游戏.模拟游戏.策略游戏,角色扮演游戏, ...

  8. 解决方案:macOS Mojave下Pycharm运行pygame无法加载外星人游戏图片以及无法修改颜色

    关于macOS Mojave下,Pycharm 运行pygame,加载不出外星人游戏图片以及无法修改颜色,解决方案如下:  1.官网升级Python3.7.2,Python Releases for ...

  9. 浅谈LZSS与游戏图片破解

      业余游戏制作者最头疼的就是没有美工的支持了.很多业余游戏制作所使用的图片都是来自于网上的很有限的一些图片资源,然而这些图片并不能完整配套,所以业余游戏的画面往往显得单调或者搭配不协调(使用多个不属 ...

最新文章

  1. Python 打印行列控制(API:pandas.set_option())
  2. nn.CrossEntropyLoss()
  3. spring mvc DispatcherServlet详解之三---request通过ModelAndView中获取View实例的过程
  4. 【AI不惑境】模型压缩中知识蒸馏技术原理及其发展现状和展望
  5. [Database] 数据库范式理论
  6. MySQL—增删改查,分组,连表,limit,union,alter,排序,去重
  7. SQL Server 中系统视图sysobjects中type字段的说明
  8. python函数复用_【python学习-4】可复用函数与模块
  9. 报表用法 获取rdlc报表的控件
  10. 各种字符串Hash函数
  11. 【背包问题】基于matlab量子免疫克隆算法求解背包问题【含Matlab源码 424期】
  12. 一棵树的生物量怎么算_2019玩花园 | 夏天怎么办?
  13. html 多选框 下拉,一个模拟html下拉多选框的原生实现.
  14. 层次分析法(AHP)原理以及应用
  15. android studio 制作.9 图片
  16. Codeforces Round #439 (Div. 2)C - The Intriguing Obsession(简单dp)
  17. 如何在GraphPad Prism 里创建条形图?
  18. matlab中转置运算符,MATLAB 软件中,运算符 / 表示()运算。A. 乘法B. 除法C. 乘方D. 矩阵转置...
  19. 尼古拉·特斯拉,到底有多神?
  20. 计算机三级数据库技术 第14章 数据仓库与数据挖掘

热门文章

  1. mysql远程访问授权命令_mysql远程访问授权
  2. php socket 小程序,实例详解微信小程序如何使用Socket
  3. Redux-React 代码原理分析
  4. mysql导入xml 工具下载_XmlToOracle(XML导入Oracle工具)下载_XmlToOracle(XML导入Oracle工具) 版本: V2.0官方版_魅蓝下载...
  5. C语言小知识---printf()函数转换符的意义
  6. 超实用的浏览器插件:CSDN 一键搜索、自定义工具、全站去广告、一键美化等
  7. Java中包、导包、修饰符和内部类
  8. java代码发送http请求时DnsResolver使用问题
  9. fatal error C1083: Cannot open source file
  10. CSS-滤镜 -webkit-filter