摘要:
比较引用类型的字段引用对象相等有两种含义:一是两个变量指向的是同一引用,二是二者的Equals方法相同(约定)。Object有一个静态方法Equals,它会先比较是否为同一引用再返回Equals方法的结果。Object中的静态Equals方法Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--publicstaticboolEquals(ObjectobjA,ObjectobjB){if(objA==objB){returntrue;}if(objA= 阅读全文
随笔档案-2010年12月
谈CLR的装箱与拆箱
2010-12-29 11:53 by 姜 萌@cnblogs, 2406 阅读, 收藏,
摘要:
CLR类型系统有两种主要类型—Reference Type和ValueType。前者是在托管堆中被分配内存并接受管理,后者则有两种形态--装箱与未装箱,对于装箱形态的值对象是在托管堆中,未装箱形态的值对象是在栈上分配。 CLR堆上对象和栈上对象的差异 每一个堆上对象都有两个额外的字段,一个是类型引用表的指针,用于实现多态,类似于C++的多态机制,另一个字段是SyncBlockIndex,用于实现CLR线程同步机制。栈上对象则无这两个字段。 装箱的过程 装箱: 在堆上开辟内存,包括2个额外字段+值对象大小。 将值对象复制过去 3.返回新分配对象的地址。 拆箱的过程 1.如果为null, 阅读全文
浅谈缓存的设计与使用注意项(下)
2010-12-28 00:46 by 姜 萌@cnblogs, 1963 阅读, 收藏,
摘要:
缓存的加载策略--Proactive 和Reactive proactive的策略就是一开始就将所有backing store中的数据加载到进程内存中,这样做的好处是在数据量相对不大的时候会显得很有效率,无需频繁的访问backing store调出数据,并且也不用再代码中判断缓存中是否缓存有数据,是否要从backing store中加载。 reactive策略是“按需加载”,在程序初始化阶段仅加载必要的数据到内存缓存起来,其余数据只有在需要时才从数据库中调出再缓存。这种策略比较保守,缺点是在数据量比较大且频繁访问之初由于要多次频繁的向backing store获取数据,但通常我们使用这种的就 阅读全文
浅谈缓存的设计与使用注意项(上)
2010-12-28 00:13 by 姜 萌@cnblogs, 1790 阅读, 收藏,
摘要:
memory cache + backing store enterprise libiary中的caching block 在微软pattern&practise团队发布的enterprise library5版本中带有一个caching block,这个缓存块为我们提供了缓存数据大一些列方法。其架构如下图(这里再说明一下:caching block以后会被整合进.net framework之中,enterlib5的后续版本会将caching block剔除): caching block采用的是“内存缓存+backing store”结构(不过backing store是可选的),程序 阅读全文
silverlight游戏设计(四)角色/精灵篇之 -- 精灵的设计
2010-12-26 19:06 by 姜 萌@cnblogs, 1518 阅读, 收藏,
摘要:
精灵的呈现基础 silverlight的那套api并不是一个为游戏设计的,你找不到现成的”精灵”相关的类。 最简单的精灵用一个Image就可以充当,但游戏中总是存在各式各样的精灵,不同精灵又有不同的逻辑,为了方便设计我们有必要定义一些接口。 呈现器接口—IPresenter IPresenterCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--namespaceSopaco.Silverlight.GameFramewrok.Sprite{// 阅读全文
silverlight游戏设计(二)资源管理篇(补充)--图片帧序列资源包解析与图片资源处理
2010-12-26 17:05 by 姜 萌@cnblogs, 700 阅读, 收藏,
摘要:
通过在上篇文章中构建的资源管理器和应用的demo,我们已经能够将游戏资源高效的下载过来并进行缓存。那么在资源管理这一块剩下的就是我们定义自己的资源文件结构和解析资源了。本文像大家展示图片资源包的组织和解析,以及涉及一些有用技巧。 StreamResourceInfo 一个mmorp 游戏的资源是非常多且杂的。比如单说玩家职业就可能有5、6种,每种又分性别,对于一个精灵而言,至少要准备是5个方向的帧序列动画图片(比如上,下,左,左上,左下。对于右边,右上和右下用前几种直接翻转即可),而动作上还能细分出站立、跑、战斗、死亡……。所以我们需要对资源进行归并、打包。这样不仅便于项目文件管理,而且还能 阅读全文
silverlight游戏设计(二)资源管理篇(下)--资源的状态通知、管理与缓存
2010-12-24 19:18 by 姜 萌@cnblogs, 1266 阅读, 收藏,
摘要:
在上篇中,我们实现了一个带有池化、并发连接限制能力的资源下载器,虽然这个下载器能够使我们的游戏动态加载资源并在加载完毕/失败后调用回调方法。但是还是缺乏一些智能。比如我要加载一个game_role_petegg.zip的资源包,如我们有需求:1.对已经下载过的资源不再重复下载。2.下载过的资源要缓存,一方面存在内存中,一方面存在isolatedstorage中。实现这些功能会极大的提高用户体验,所我们有必要设计一个带有缓存控制能力的资源管理器。复用已有的DownloadDelegater搞开发的嘛,不可能每一个需求都单独写一片代码,这要将对象的职责分离清楚,复用还是很容易的。我们定义需求接口: 阅读全文
silverlight游戏设计(七)--项目组织
2010-12-24 16:30 by 姜 萌@cnblogs, 1168 阅读, 收藏,
摘要:
组织项目结构总揽 完成一个好的项目就像盖房子,光有一流的工人师傅还不够,还需要将他合理分工,这样才能确保工程的有序进行,各负各的职责。一起的一个项目大致是这样的结构: GameLibrary:作为整个游戏所需要的基础库和游戏引擎。当然实际中的会包括许多library。 GameBiz:游戏的逻辑,并作为游戏执行入口,它向UI注册事件,通过基础库和游戏引擎构建业务逻辑。引用GameLibrary等基础库和GameUI。 GameUI:只引用silverlight本身必须的库以及项目的自定义控件库 GameLoader:游戏的引导器或者叫做加载器,参见之前的文章:silverlight游戏 阅读全文
silverlight游戏设计(三)性能优化篇(上) -- Storyboard与DispatcherTimer的使用
2010-12-23 13:55 by 姜 萌@cnblogs, 1657 阅读, 收藏,
摘要:
其实说起性能优化,与其说是技术问题,不如说是编程习惯问题。在我之前所经历的webgame项目中,sl与flash对比?按照微软的说法,或许sl能够比flash性能更强。但是如同评判一个程序的好坏一样,绝大多数情况下性能的优劣取决于你是怎么写的代码而不是所依托底层技术。引起注意我小小总结了一下,在UI层次上应该注意一下几点:不要过分使用Storyboard不要过分使用BitmapEffect不要过分... 阅读全文
silverlight游戏设计(三)性能优化篇(外传) -- struct与class的选取
2010-12-22 17:36 by 姜 萌@cnblogs, 1067 阅读, 收藏,
摘要:
上篇所说打性能优化点基本上都是针对silverlight本身相关的,其实silverlight作为一个精简的跨平台.net运行时,我们同样需要注意底层的一些性能问题,比如今天所要说的struct 与 class。说道struct和class,这就要从CLR 的类型说起。CLR类型underlying type:基础类型,包括int,short,long,ushort等。Reference Type:引用类型,其实java/.net程序中大多数类型都是引用类型。对于基本类型,Value Type:从System.ValueType继承而来,直接在栈上创建。在C++中,我们可以随意在栈上创建和销毁 阅读全文
silverlight游戏设计(二)资源管理篇(上)--实现一个多任务资源下载器
2010-12-21 22:32 by 姜 萌@cnblogs, 1583 阅读, 收藏,
摘要:
我在silverlight游戏设计(一)主程序加载器这篇文章中写的那个加载器中其实已经包含了一个下载器。不过本篇需要的是一个在游戏运行时动态执行的下载器,这两者有什么区别呢?一方面在于前篇的那个下载器是串行下载所有文件,而对于一个正在运行的网游,因为我们对大部分资源(比如图片、脚本等)采取动态加载的策略,所以它随时都有可能去请求下载,也就是需要同时进行更多的下载任务;二是我们这个下载器与接下来资源... 阅读全文
silverlight游戏设计(一)主程序加载器
2010-12-21 09:36 by 姜 萌@cnblogs, 940 阅读, 收藏,
摘要:
有段时间没有搞webgame了,近期看到园子里有些silverlight方面文章,忍不住手闲也写几篇文章。作为silverlight webgame的开篇文章,先给大家普及一下主程序加载器的概念。 什么是加载器/为什么需要加载器 我们想一想,一个webgame做下来大概要多大?即便图片资源和其他一些诸如脚本等数据包是动态下载的,我所经历过的webgame最基本的少说也要500KB。对于国人来讲... 阅读全文
数据统计的视觉盛宴---visifire charts
2010-12-16 00:19 by 姜 萌@cnblogs, 4911 阅读, 收藏,
摘要:
上文中我给大家展示了微软提供的开源toolkit中图表控件的效果和使用,但是与fusion charts相比效果还是显得逊色。本篇将介绍另一种charts控件库—visifire charts。 visifire控件库不仅涵盖wpf/silverlight,还有windows phone的版本(由此可见将wpf的代码移植到silverlight和windows phone上是一个非常平滑的过程)。我们可以从visifire官网下载试用版本。 更加丰富的图表样式 wpf toolkit中的charts提供了7中现成的控件:AreaSeries,PieSeries,LineSeries,Bar 阅读全文
Android创意应用Chinchilla Wish发布!
2010-12-15 13:49 by 姜 萌@cnblogs, 489 阅读, 收藏,
摘要:
Chinchilla Wish 1.0(琴琪拉祝福) 当圣诞老人驾着马车在来圣诞节的路上叫嚣着“jingle bells, jingle bells,……”,传说中的琴琪拉团队已经在时空的另一侧,在一个寒冷的夜晚悄无声息的想出了一个惊世骇俗的绝妙android应用。加班加点几个小时发布Chinchilla Wish这个软件(琴琪拉祝福)。 ok,现在切入广告正文:P 让我来告诉你Chinchilla Wish是做什么的。 什么?你还在那种大家都司空见惯了的祝福网站上发表祝福?那你就out了,我们都是用android机的人,我们都是有身份的人,我们要发祝福当然要在手机上发。机会来了!有了琴琪拉 阅读全文
使用WPF toolkit--Charts使你的数据展现更加形象
2010-12-14 15:41 by 姜 萌@cnblogs, 13396 阅读, 收藏,
摘要:
今天在wooboo上看我们移动广告的收入情况时,发现上面的那个图表挺好看的,这个图表是用flex做的,查了下还挺有名,叫fusionchart,有免费版本和收费版本。 (flex上有名的fusion chart) 虽然.net没有提供线程的wpf/silverlight图表控件,但是在wpf/silverlight toolkit中包含了常用实用控件:AreaSeries,PieSeries,L... 阅读全文
谈.net开发人员应该熟悉的开发模式
2010-12-11 16:32 by 姜 萌@cnblogs, 4911 阅读, 收藏,
摘要:
我们总会有这样一个经验:一个系统最不容易也最不应该变化的部分是领域逻辑,最容易变化也最应该变化的是数据的呈现方式。在java的各种应用中可以说是到处可见mvc,j2ee贯穿mvc的概念,android的开发方式也是类mvc的,mvc结构对于做过java应用的人而言简直就是司空见惯。而在.net这边,由于之前微软为大家提供的各种winform、asp.net项目典范(比如那个petshop seri... 阅读全文
一个.net客户端通讯框架的设计(四)---协议解码/编码器工厂以及为其他模块提供消息的dealers/trigers
2010-12-10 10:15 by 姜 萌@cnblogs, 2629 阅读, 收藏,
摘要:
解码器IDecoder的实现在前几篇篇文章中,我们的通讯模块已经实现了socket连接、消息的发送与消息的解析,不过消息的解析部分是接口调用,并没有给出确切的协议解析方式。协议的解析式完全可以定制的。我们只需实现IDecoder接口即可。在前言中,我给出了目前我所使用的协议格式,基于这个协议格式,我们实现IDecoder如下:如果是NEED_DATA,它会再次接受消息。如果是OK,调用Decode... 阅读全文
团队Android小作品Chinchilla Guitar(琴琪拉吉他)发布,欢迎大家下载~~
2010-12-09 12:37 by 姜 萌@cnblogs, 1055 阅读, 收藏,
摘要:
PS:大家全当这是广告文就ok了,我们团队的一款小作品---琴琪拉吉他已经发布,一天内总下载量已突破1000。大家可以到eoemarket,哇棒,天翼market等市场下载。琴琪拉吉他,Android有史以来最好的吉他软件。弹奏0延迟,让你体会真实的吉他演奏。不会弹吉他也没关系!琴琪拉吉他提供多种辅助教学模式,让你在极短时间内,从一个对吉他一窍不通的人,到能够在朋友或爱人前面熟练弹唱吉他歌曲的人。它还有自定义吉他谱功能,你想弹什么,或者想学什么吉他歌曲,只要花费5分钟在原吉他谱基础上稍作修改,就能够在它上边运行,再花费5分钟进行简单的练习,你就能够在人们面前弹唱啦!!!吉他弹奏零延迟,让你享受 阅读全文
一个.net客户端通讯框架的设计(三)---设计IO连接
2010-12-09 12:02 by 姜 萌@cnblogs, 2892 阅读, 收藏,
摘要:
IAsyncIOService(对应代码里的IAsyncConnector)这是一个异步IO服务接口,含有一下几个方法。IAsyncConnectorCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--publicinterfaceIAsyncConnec... 阅读全文
一个.net客户端通讯框架的设计(二)---准备FastBuffer和BOConverter
2010-12-09 11:20 by 姜 萌@cnblogs, 2511 阅读, 收藏,
摘要:
在网络编程中,我们会频繁用到两个东西,一个是buffer。一个是bit-order。把数据填充到buffer中,然后通过buffer读写我们所需要的基本数据,还好.NET为我们提供了BitConverter这个非常好用的util,方便我们编写自己的Buffer和字节序转换器。 IBuffer 通常Buffer会有如下几个概念;position,limit,capacity,flip,mark,... 阅读全文
一个.net客户端通讯框架的设计(一)---前言
2010-12-09 11:09 by 姜 萌@cnblogs, 2453 阅读, 收藏,
摘要:
背景 最近我们的团队正在开发一款面向移动平台的LBS应用,客户端有android、j2me版本,LBS的概念非常不错我们希望将其发挥带极致。本人在这个项目中主导服务器开发(java平台)。由于人手有限以及团队中各自专长不同,服务器的数据统计与将来的PC端也又我一人用.NET承包了:P好了,废话不多说我们直入正题。 其实有人会认为,不就是客户端与服务器的通信嘛,很简单,如果用阻塞I/O的话开两根线程,一根从网络I/O中读取数据,将每条消息投递到一个消息队列中,然后通过一些触发机制触发这些消息的处理代码;要写的话将要写的代码投递到一个输出队列中,另一根线程从这个队列poll消息然后write到流 阅读全文
浙公网安备 33010602011771号