APUE上关于fork的使用有段比较经典的代码:
if ((pid = fork()) < 0) {
err_sys("fork error");
} else if (pid == 0) { /* child */
execlp(buf, buf, (char *)0);
err_ret("couldn't execute: %s", buf);
exit(127);
}
/* parent */
if ((pid = waitpid(pid, &status, 0)) < 0)
err_sys("waitpid error");
一开始看这段代码会有疑惑,比如说else if(pid==0)执行子进程代码那块,字面上理解这段代码就是说进程号为0则判断其为子进程,则执行里面的代码,可是,子进程号为0,这怎么可能? 因此我觉得这里将fork的返回值取名为pid有误导读者的影响,改为fRetValue或者干脆叫i会不会好点?
下面是网上摘的一段fork的解释:
调用方法
#include
#include
pid_t fork(void);
正确返回:在父进程中返回子进程的进程号,在子进程中返回0
错误返回:-1
子进程是父进程的一个拷贝。即,子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存;而对于只读的代码段,通常使用共享内存的方式访问。fork返回后,子进程和父进程都从调用fork函数的下一条语句开始执行。
父进程与子进程的不同之处在于:fork的返回值不同——父进程中的返回值为子进程的进程号,而子进程为0
关于fork,还有个问题,就是print缓冲区被子进程复制的问题,如果执行下面这段代码:
pid_t fRetValue;
printf(”fork!”);
fRetValue=fork();
if (fRetValue < 0)
printf(”error in fork!”);
else if (fRetValue == 0)
printf(”i am the child process, my process id is %d”,getpid());
else
printf(”i am the parent process, my process id is %d”,getpid());
父子进程都会打印出fork!,而如果将printf(”fork!”)改为printf(”fork!\n”)就只会打印出一个fork!,同样摘了段解释如下:
主要的区别是因为有了一个\n回车符号这就跟Printf的缓冲机制有关了,printf某些内容时,操作系统仅仅是把该内容放到了stdout的缓冲队列里了,并没有实际的写到屏幕上但是,只要看到有 n 则会立即刷新stdout,因此就马上能够打印了.运行了printf(”AAAAAA”) 后, AAAAAA 仅仅被放到了缓冲里,再运行到fork时,缓冲里面的 AAAAAA 被子进程继承了因此在子进程度stdout缓冲里面就也有了 AAAAAA.所以,你最终看到的会是 AAAAAA 被printf了2次!!!!而运行 printf(”AAAAAAn”)后, AAAAAA 被立即打印到了屏幕上,之后fork到的子进程里的stdout缓冲里不会有 AAAAAA 内容因此你看到的结果会是 AAAAAA 被printf了1次!!!!
元旦回去姐夫跟我聊起汪峰,说他原来是搞乐队的,名字叫鲍家街43号,是他大学的门牌号。然后我开玩笑说我以后也弄个乐队,叫汉口路22号。他一听乐了说那他的叫张家村40号,专搞乡村音乐。好吧,汉口路22号以后是肯定要写的,现在想说点在创业新村住那会儿的故事,应该是5幢12单元401。前几天在卓越上买书的时候这个地址刚被我从地址簿里面删除了,记得以前每次网购东西都特方便,快递员直接送到门口,我总是一边提着裤子,一边喊来了来了,然后签字画押感谢关门转身拆封一气呵成,一来二去,这个地址不可避免地让我留下了很深刻的印象,就像小区超市的营业员mm、生意可以不做牌不能不打的超市老板、脸部分辨率很低的韩国人、门口饭店的肥肠炒饭加两个蛋、周边的小吃摊、旁边中学每天喇叭里的广播体操眼保健操和熟女房东丰满的胸部一样,迄今记忆犹新。我想,这个地方这辈子是不会再去了,手机里房东的号码也删除了,这个人这辈子也不会再联系了。
我想了下我这个博客更新速度如此慢的原因,可能是下面的几点:一、生活匆匆向前,虽然空闲发呆扯淡无聊的时间很多,但这些时间号称努力奋斗的我并没有打算用在停下来思考人生这件事上,而是原本打算用来多看两本专业书、多写两行代码、多积累一些装逼资本,然而落得两手空空的我不仅和自己的梦想渐行渐远,也没有工夫留下点思考的痕迹,总是急着去陷入下一个恶性循环里;二、目前居住条件所限,和同学蜗居在很小的房间内,连我看个毛片的私人空间也没有,更别说很注重隐私的我想写点隐私的东西了;三、滞后性,当时不写,喜欢拖一阵子再说,拖的时间长想想算了吧,也没啥热情了,等到以后想写的什么时发现经历了那么多事不知从何写起。今天同学跑回家过寒假去了,我一个人独占十几平米豪宅,私人空间和寂寞都回来了,晚上躺床上听歌,听得眼泪哗哗,心想,操!这不就是我在创业新村那会儿吗?只不过那会儿我听一会歌流一会眼泪以后还得爬起来捡起那本翻烂了的高数开始啃,现在可以在床上肆意翻滚,让寂寞在体内肆意翻滚,老子就不起来。
我记得我是08年的4月份跟zt两人为了考研在那租的房,70多平米,二室一厅一厨一卫,每个月房租400。现在只能感慨乡下的房子太便宜了,同样是400,我在这里只能住10几平米,还是合租。我们两个用了一个礼拜配齐了所有的设备,包括碗、筷、铁锅、铲子、菜刀、电饭煲、电热水壶、打气筒、油盐酱醋葱蒜辣椒、床上用品等等等,把一个几乎什么都没的毛坯房整成像模像样可以住人的地方。这个地方离浦口大学骑车不过10分钟,我们隔三差五会去学校里转转,去学院里上上课。小区挺安静,有篮球场,超市饭店菜场报亭小吃都有,这里住着各种外地人,韩国人尤其多。是不是韩国人不用开口就能看出来。他们不管男的女的,都喜欢戴个帽子,弄副黑框眼镜,大冬天喜欢穿短裤拖鞋,头发肯定是长的,出现肯定是一群的,说话肯定是红萝卜青萝卜的。
我经常在一家现在记不起名字的饭馆吃炒饭,那家饭馆和旁边的超市是连着的,是同一个老板开的,老板娘偶尔会穿着高跟鞋噔噔从身边走过,老板会在老板娘不在的时候和几个女员工打打小情骂骂小俏摸摸小手。很欣慰我喜欢的那个超市mm没有被摸过,或者没在店里摸过。我第一次见她是我第一次去超市里买废纸篓拖把,姑娘年纪与我相仿,淡妆,穿那种很俗的裤袜,牛仔裙,声音偏硬,但长的水灵,付钱时看了我几眼,我也看了她几眼,没说话。有时候我在隔壁吃午饭她蹦跶进来聊天,我吃一口炒饭,抬头瞄她两眼,有时候我感觉她也瞄我两眼,不过可能是错觉。我吃完就擦擦嘴回去看书,所以我和她说过的话不超过10句,多是这样的对话,“就拿这些”“一共23块钱”,“有蓝色笔芯么”“有,你要几支”。作为一个闷骚且单身的男性,对话是如此简洁,简洁得都让我蛋疼,我一蛋疼就想写诗给她。我还真写了首诗,不过是自己写着玩的,没啥内容,也全忘了,但我记得里面有“今夜”和“精液”两个蠢蠢欲动的词,代表当时对她的喜欢只是一种朦胧的考研中的男人的身体的一部分的寂寞而已。后来我再也没有见过她。
zt的老婆基本每两个礼拜来这住几天,zt住的大房间,我一个人住一间小一点的。他们每次来都自己做饭吃,我有幸蹭了他们好多次饭,有时候把猴子及其夫人一起叫来吃饭,两对情侣加一光棍,倒也其乐融融。zt和夫人很会做菜,并且享受一起下厨的每一分钟。他们总是白天一起去图书馆看书,下午两三点坐公交去离江大桥不远的苏果买各种菜和各种调料,回来夫唱妇随做饭炒菜,有时候还会哼点小曲。他说他们云南做菜调料很讲究,从我的观察来看是放调料放的比这里多很多,换句话说是口味挺重的。云南人喜欢吃辣,自己家里会做点调味酱。据猴子说zt带的自己家做的酱很好吃。zt做菜不管原料多简单,哪怕只有土豆和肉丝,他给你捣鼓个很赞的土豆泥出来,再来点青椒,就又多了一道青椒炒土豆丝,弄点挂面,煎两鸡蛋,一顿中饭可以吃的很饱了。这些都他一个人弄的,我一般负责吃和洗碗。
在创业新村的日子可以分为两段,分水岭是09年1月10号这天,确切说是下午5点平静走出考场笑说要去找工作了的那一刻,后来阅卷中心没有给我这个机会,我丢盔弃甲几个月后又重新做回了学生,从乡下的学生做到了城里的学生,从每年捐一万六稍微上点课到无偿捐两万几乎没上课,当然这都是后话了。1月10号以前,过着折腾中求稳定的生活,1月10号以后,过着稳定中求折腾的生活。我现在记得最清楚的是暑假上文登考研的情景。我和zt每天6点就要起床,骑车15分钟到浦大后门,等那里6点55分的班车接送。第一个接的是我们,所以上车都有位子坐。由于大四出了我们院都搬去了鼓楼,所以这里要考研的只有我们院和三本的没几个人。大多上了车就开始打一会盹。车子沿途会经过好几个院校接人,后来上车的比我们还不幸,都站着,而且很挤。我和zt基本都坐最后排,好看看美女。现在还记得当时在车上以及在班上经常看到的一对情侣,女的长不错。zt跟我说,不知他们上冲刺班的时候会不会还是一起来一起走,我说那时候天冷,他们穿上了衣服就认不出来了。车子可能会在江大桥上堵一会车,这是常事,也是南京人的常识,过了江大桥,一路向东南方向的东南大学奔去,到那正好上课。上课地点是东大的礼堂,三层楼,听有幸坐一楼的同学说底下的空调打巨冷,我们迟到的都坐三楼,三楼没一点冷气,纯蒸桑拿。座位是电影院那种,记笔记只好弯着腰翘个腿本子放上面写,上午三个多小时,下午三个多小时。中午学校门口随便吃点盒饭,回去干坐着用本子猛扇。对于一个午后必睡午觉、颈椎极度敏感、讨厌出汗以后发粘的皮肤的人,一边竖中指一边使大脑真空状聊以自慰。当时反而希望一直出汗,好感觉像在蒸桑拿,用新一轮的汗液冲掉那种浑身黏黏的感觉。一开始的10天全是数学,基本每天做的事情就是往那一坐,开始抄老师幻灯片下的每一道题,一天7小时手从没停过,笔每两天要换一支,压根不想他在讲什么,抄下来再说,想也想不懂,因为那会数学书还没看过,抄这些只是为了以后复习的时候看看。实际上那个暑假拼死抄回来的一本多的笔记后来从来没有翻过。考研班全是shit,但他愿打你也愿挨,钱就这么赚,不用指望他们会像开源软件一样把他们的源代码公开。zt很猛,发了39度的烧还坚持一边记笔记一边思考,所以考虑到他后来的事还挺为他惋惜的。这段时间还去宁波和上海玩了两趟。虽然跟很多人比,我复习远谈不上认真二字,但两个月的闭关依然让我有窒息的感觉。这期间的唯一的出口也许就是每天23点以后校内上发发牢骚装装逼,看到别人回复我才感觉到自己和这个世界是连在一起的,而笔记本屏幕在那些个漆黑的夜里就像一个光明的出口,闷骚如我也需要通过这个出口用一串串0和1交换一些别人对我的关注,比如看毛概实在无聊时候发个“一边看《墓碑:中国六十年代大饥荒纪实》一边看毛概的感觉真爽,就像被人轮了还夸人技术好一样。”,那时候还没用twitter,只能当校内日志发,企图说些荤段子吸引别人跟我聊聊天,无奈很快被删帖了。又比如临考前两天发张这样的图壮壮胆
无奈也被删帖了。比如跟人发誓说一定7点起床,出于道德约束这招还挺管用的。关于这段时间的一些体会,以前写过,会贴在文章最后。
我又开始拖了,09年的流水账以后再写,累了,打打睡了,附上《挑研之初体验》。
======================================================================
从 11号下午将专业课的卷子小心放进密封袋交给pp的监考mm开始,到现在已经打了整整4天酱油了。在第四天的半夜,想继前年寒假的那篇游记之后,第二次认 真地总结下一些日子。对于这段日子,我有过彷徨,有过崩溃,有过麻木,快乐也有,不多。一路的中指竖下来,最后自己也累了,老老实实地看书和崩溃,竟也活 着过来了。如今还敝帚自珍地将它分享,哎怎么说呢,大家多半是高考过的,明白这种感觉。
这篇文章里,你不会看到关于某门课的复习攻略,不会看到具体复习方法指导;你可以看到的是,一个并不成功的考研er在讲述他并不牛逼的经历以及他从中获得的东西。
我不知道该从何写起,我脑子里只有不停闪过的一些关键词,和一条时间推进的主线。那么,不妨就用基于时间顺序特性的意识流手法来完成它罢。
============分割线一条================================
首先要解释下什么叫考研。她包含两个部分,第一个是准备考试,第二个是考试。这与大学里的专业课考试有所不同,后者通常只包含第二个部分。正是由于当初对 第一部分过于乐观的估计,我迷糊地走上了考研这条路。考研考4门,政治100分,英语100分,数学150分,专业课150分。
考研的动机。引用同学的话,没有办法才考研。也有同学认为这是一种理想。我并没有独立自主地做决定,我尊重了家长的意思。
原有印象。在我脑中的一个牛逼的考研er的形象应该是这样的:每天6点半起床,背个书包拿个水杯,匆匆去食堂吃早饭,争取7点半前到教室开始看书,然后除 了吃饭时间一直看书至晚上10点半回宿舍再看一个小时书然后睡觉。于是我选择了报自己院,传说中只要一个月就能考上,我采纳了辅导员的意见,准备9月份开 学开始复习。考研难度递增的顺序是本校本系到本校跨系到外校本系到外校跨系。我作了最偷懒的选择。同学说你考自己院那是相当轻松,我现在的回答是,吃得苦 是一样多的,轻松只体现在考上的可能性上。
总的历程。3月份做完决定,4月份和同学租房,到6月底为止每天打酱油比在宿舍还过得还醉生梦死,7月份有20天的政治和数学的强化班,熬过后8月回家玩了一个月,9月份开始看数学,月底回去玩了大半个月,真正认真看是从10月中旬开始。
============分割线一条================================
以下是一些关键词。
关键词之一,“非智力因素的决定作用 ”。如同做其他所有事情一样,一个人的思维习惯在考研中的作用不容小觑。1.考研是体力活,不是技术活。它体现的是付出与收获的正比关系。我自己不是少数 极有天赋的声称能一个月搞定的人,因此我只有老老实实地看书。2.考研比较适合单细胞的人,他们做事容易投入和持久,而对于想法很多的人,很难专注地从事 长时间的系统工程,那就让自己的意志去发挥作用吧。3.在需要理解记忆的环节,如数学中的定理公式,政治的大题等,从小养成的记忆习惯是影响效率的重要因 素。从小我背课文都是要求一字不差的背下来,然后才能得到家长“已背”的签字,我在准备考研政治大题的时候觉得很吃力,我知道应该背层次而不是背逐个句 子,但我很难改正我的背书方法。这也是为什么有的人政治看个一遍就行,而我看下来觉得脑子里空的,尤其对于邓论部分需要大量记忆的东西。平时注重思维训 练,记忆先从整体上把握,其余的细枝末节,吹罢,写作文还不会么。4.性格因素。有人乐观,有人悲观。这决定了你会不会老想考不上怎么办,会不会因为谁谁 谁今天看了100页书而你只看了30页而懊恼不已,会不会因为今天去修车胎耽误了一小时而郁闷,会不会因为某天的计划没有完成而焦虑,会不会考前紧张得失 眠等等。5.自律能力。这决定了你今天下午是看三部电影还是做30道题,吃完午饭晚饭是直接跑教室还是先去机房上个百合校内,闹钟7点响是拔了电池板继续 睡还是揉着双眼去冲咖啡,心里翻江倒海的时候是抓起电话找人倾诉还是安静地在床上躺会,看到别人拿了牛offer在机房dota会不会仍然保持微笑。
关键词之二,“慢就是快”。这句开车以及搞经济需要注意的话在考研上同样适用。我们不要企图“大跃进”。当初我片面追求速度的增长,忽视了质量和效益的提高,造成的结果是一遍李 永乐下来,该忘的全忘了,不该忘的也差不多了。第一遍做的时候囫囵吞枣,课后习题没做,这样一天下来虽然看着几十页心里挺有成就感,但记忆效果很不好。两 遍下来的效果跟慢慢地做一遍基本相当,花的时间要多好多。数学就是该做题做题做题,一条一条,必做细,必做透,然后才做多。
关键词之三,“有挑战的目标”。将目标设定成需要尽全力才能达到,强迫自己用全力,并且达到后有更大的成就感。这一点体现在报名的时候可以报外校和外系。
关键词之四,“奥卡姆剃刀”。这个原理大意是化简你的生活,能简则简。但是,贪婪的我始终没有勇敢地拿起这把剃刀来简化自己。我最大的心里障碍是拿得起,放不下。“我们试图占有一 切,而这往往把我们弄得精疲力竭。”长期以来我的思维习惯都是追求利益的最大化,比如每天总是为明天列下长长的to do list,唯恐漏掉一件,如若只列一两件,会觉得明天肯定会过得特空洞。这是TDL带来的负面效果,仿佛离开了TDL人就不会做事了,实际上抹杀了人的主 观能动性,把生活当程序来机械处理。比如放了一堆书在旁边作为明天的任务,同时还窃喜,明天看完就牛逼了。结果无一例外–看不完,累到死,心情很不好。 冗杂的任务会让你无法集中精力到手边的事情,旁边一坨没看的书压在心头滋味不好受。“何不把悲哀感觉假设是来自你虚构”。这些焦虑的产生并非你要实现的目 的本身带来的,是你人为造成的。用一天时间尝试下简化后的生活,恩,胃口好了,脑子也不短路了,吃嘛嘛香。
关键词之五,“改革、发展与稳定”。稳定是改革与发展的基础和保证。所谓稳定,即在同一处看书,同一时刻吃饭睡觉起床,每天保证稳定的学习时间。我的考研生活过得很不稳定。一眼看过去, 一路的动荡和不安。我看过书的地方有6处,租房、软院自习室、机房、图书馆、教学楼、自己家里,没有哪处是坚持满一个礼拜的。期间我还跟随找工作的大军在 城乡间来回参加了若干次笔试和一次面试,拿了我的处女offer并拒之。由于没有长期占座,在期末临近时候在透不过气的软院自习室找座位。考研班的来回奔 波。就这样把部分能量花在了这些进程的切换上。我经历的考研和我理想中的差距很大。
关键词之六,“拔掉你的网线”。以前有同学到快考试的时候会大喊“我再不玩魔兽世界啦”,然后把游戏删掉,当时暗笑他过两天自己肯定又装了。不过我在需要用电脑看课件的时候发现这是 有一定效果的。当我电脑插着网线时候,每隔几分钟不自觉地就会去双击火狐的图标,打开来看几张网页,或者点开电驴,看看速度怎么样,然后再看几张课件。然 后我拔网线试试,我发现自己每次有开网页的念头时,都会因为“懒得去插网线”这个可笑的念头而终止自己的行为。同样的例子在吃瓜子的时候也出现,眼睛盯着 屏幕看电影,手从袋子里一颗接一颗地捻起瓜子往嘴里送。也没什么特别的欲望非要吃瓜子,但就是吃完一颗接着一颗,吃得嘴皮子都要破了还不停,然后发誓说这 是最后一颗了,马上再不吃了,过五分钟手又去抓了吃。然后就把袋子对折一下放进抽屉里。结果自己就“懒得”打开抽屉去拿了。可能的原因是:人类潜意识里会 将做一件事的成本与其价值进行比较,然后作出更有利于自身需要的决定。对于那些本无所谓做与不做的事情,其价值稍微不及我们做它所需要的成本,于是我们就 “懒得”去做了。
关键词之七,“写下要做的”。好处一是第二天比较省力,可以不去想过会要干什么。好处二是不会忘记要做的事。坏处是如果执行力差没完成,心情受影响,并且会让自己怀疑这样做到底有 没有价值。考前一个月我写下了当天要准备下英语作文的模板,当天没完成,第二天又写了一下,又没完成。最后我英语模板是在1月8号晚上弄好的,拖了一个 月。其实也就4个小时的工作量而已。
============分割线一条================================
考研,这个古老而神秘的字眼在我很小时就进入了我视野,伴随而来总有她神奇的令人“为伊消得人憔悴”的魔力。如今自己亲自揭开了她的面纱,一品其独特风味, 虽然不能用来装B,但也能自豪地说出“咱也是经历过考研的人了”这样的“豪言壮语”,人生不可避免地又完整了一些。。。
絮絮叨叨讲了半天, 自己也累了,还好跑题跑得不算太远。理论上考研还没有结束,现在盖棺定论未免过早。因此我只能说些自己的经历和体会,至于怎样复习和准备,比我有发言权的 大有人在,我也不好意思献丑。我还是自己的风格,写不了高深莫测的东西,咱就说点实话,也算为自己留下点东西。
njuxjy @ 09.01.15
我辞职了。
几年前,当网易刚刚推出《梦幻西游》的时候,我们四个老朋友约了一起去打网游。在游戏里,老鬼庆叫鸳鸯蝴蝶扇,吕少叫逍遥吕少,晖晖叫吴霜剑,我还 是叫和菜头。虽然出生地有不同,但是我们基本都在昆明开始念小学,一直读到高中。家里能有钱供我们念大学,毕业以后都回到昆明,拥有一份稳定的工作。打 《梦幻西游》的时候,他们三个人已经结婚,日子细水长流。四个人中间,只有老鬼庆是自由人。他原来在一家效益很好的国企,和所有红火的国企一样,他的公司 最后破产倒闭,注册新壳重新再来。在破产之前,他辞职创业,开了自己的公司。大家都很忙,所以在游戏里见面的时间反而多过喝茶的时间。曾经我们一度玩得很 投入,每个人每个月为网易支付1000元人民币。而如果是大家见面吃饭,大概三个月都花不了那么多钱。世界已经在慢慢变化,但在当时我们懵然不觉。
前天大家再次聚会,老鬼庆已经在江湖上飘了5年,晖晖辞职开网店已经满一年,我刚刚结束了十一年的国企生涯。现在,只有吕少一个人还是“有单位 的”,玩《梦幻西游》时的比例刚好倒了过来。我们是什么?我们是小镇上的青年。小镇的生活安稳平静,一年到头风调雨顺,有吃不完的饭局喝不完的普洱打不完 的麻将和唱不完的卡拉OK。打生下来开始,小镇就为我们安排好了一条笔直的人生路,从摇篮到坟墓,只要你不逾越规矩,那么就可以一直这么生活下去。念书、 工作、结婚、生子、退休,然后老去。在这条路上,会安排几次小插曲,包括一场有惊无险的群架,一次无疾而终的爱情,一个转瞬即逝的机会,一段若有若无的婚 外情。其余的日子白云缭绕,阳光灿烂,你可以慢慢买一套房子,一辆车子,轻车熟路地活着,就像最后可以用两个指头就能解开乳罩但是彼时心跳只有80次。
纳税,而且爱国,为了岳父而学习象棋。读报,看《新闻联播》,觉得这小城和世界并不遥远。相信老婆是这市镇里最美的女人,相信孩子是那一年出生的孩 子里最聪明的一个。用一个更大的电视换掉上一个,给自己的夏利车换上宝马的喇叭,每年出去旅游一次,回来告诉自己:还是这里最好。分析时政,分析市政府、 区政府、单位的人事变动,等待升职等待加薪等待股市利好等待房价下跌等那个漂亮的女同事再次经过自己的办公室门口,做舍宾做有氧做瑜伽做户外周末去农家乐 钓鱼骑马摘果沐浴桑拿一条龙服务仅需100元。然后就老了,面带威严地走在这城里,犹如退位的帝王再次驾临自己的王国。潜伏在各个小区里,种花种草种树, 养猫养狗养金鱼,满意地看着孙儿跑来跑去,追着他/她喂饭,满心幸福但是装出无奈的样子叹息。
我当然承认这是一种幸福,而且是安稳的幸福。只是它太确定无疑了,一眼就能望到头。只是它太好了,以至于很难真去过活。
有一种人,不知道是因为DNA的变异还是前世的夙缘,总是无法安稳下来。他们的生命之流如同咆哮奔涌的大河,没有一刻能够停顿下来。在寂静无人的深 夜里,无梦相扰的安睡中,心中也有猛兽会随时醒来,躁动不安,永无宁日。出于利益的计算,谁都知道现世界安稳是好的,谁都知道外面风高浪疾。可是,即便大 海吞噬了无数人,而且每个人都明了这一点,世界上也并不因此而减少了水手和海盗的数量。总有人会把自己置于风险、压力、变动之中,不可知犹如辣椒让人痛苦 却又欲罢不能。所以,这种人宁可一次次把自己投入命运不可知的洪流,为的只是见到以前不曾见过的风景,哪怕因此而有无数辛苦遭逢也不愿意在确定无疑的生活 里慢慢老去。别人在生活中可以下的赌注很多,这种人的赌注就是他自己。
我花了十一年说服自己,我花了十一年装作是个正常人。而我却发现除了消耗自己有限的生命之外,一无所获。在我身边,有多少这样心有不甘但是又怯于举 步的人,像是金丝笼里的金丝雀,一次次犹豫、挣扎、徘徊,又一次次从笼门口退回,站回饲料和饮水边。我还可以在这条反复挣扎的小路上往返27年,可以继续 咒骂、抱怨27年。于是,我可以得到27年安稳但是绝对不快乐的日子,以及无数“想当年,如果我。。。”开头的句子。这又有什么必要?在这种人生里,唯一 值得咒骂和抱怨的就是自己。如此选择,就应该如此承担。我并不是个勇敢的人,我也非常惧怕外面的水深波澜恶,我也担忧失去所有保障自力求生的艰难。但是相 比之下,我更惧怕不变的生活,惧怕自己变成一个口沫横飞永远抱怨的糟老头子,我惧怕我自己拿到一张前往人世的门票却白白浪费了这次机会。我实在等不起了。
投入命运熊熊火,不管得失怎么量。
大学毕业5年,放弃了专业;大学毕业11年,放弃了职业、人脉、经验、福利、待遇。今天的我,和任何一个应届毕业生一样,两手空空,从头开始。和任 何一个出走小镇青年一样,站在超级城市的门口,一无所知,也一无所有。但是,也正因为没有置办家业,没有娶妻生子,现在才可以轻身上路。安迪花了17年时 间挖穿了肖申克监狱的墙,我花了11年2个月时间。安迪的墙是联邦政府建造的,而我的墙大半是我自己筑的。和自己博弈了11年,赢家是和菜头。
在我面前是一条不可知的无尽之路,不知道它会引领我走向何方。但是,我已经感觉到自由清新的风,我看到了深不可测的蔚蓝。
2008年,我33岁。
那些人
- 贾君鹏——你妈妈喊你回家吃饭
- 传说哥,寂寞哥——哥抽的不是烟,是寂寞;不要迷恋哥,哥只是个传说
- 动听中国叶倩彤——金鳞岂是池中物
- 曾哥——曾哥纯爷们,铁血史泰龙
- 春哥——要是你不努力,我也帮不了你
- 周久耕——九五至尊
- 闫德利——“艾滋女”
- 易中天——悲剧啊
那些物
- 草泥马——卧槽泥马勒戈壁
- 欺实马——草泥马和河蟹的杂交近亲,没有生育能力
- 绿坝-花季护航——24口交换机
- 河蟹——横行
- 杯具、洗具——人生就像牙缸,你可以把它看成杯具,也可以看成洗具
那些河蟹
- 跨省追捕
- 上海钓鱼
- 唐福珍自焚
- 闵行区钉子户
- 邓玉娇
- 重庆打黑
- 开胸验肺
- 断指自证
- 湖北捞尸
- 禺垃圾焚烧
- 石首抢尸
- 刘晓波
- verycd, BTChina
- 央视针对网瘾报道bug频出(尾行门、梦幻西游8年)
- IDC白名单
- 版署和文化部的博弈
- 不作恶的谷歌涉黄
- 央视强推“坚持主旋律的国家网络电视台”
那些酱油
- 成都公交
- 实名推荐上北大
- 蜗居
- 偷菜
- 迈克尔杰克逊去世
- 罗京去世
- 季羡林去世
- 杨宪益去世
- 任继愈去世
- 7月日全食
- 孙伟铭无证醉酒驾车被判无期,是国内首位因无证醉酒驾车肇事而获最高刑罚者
- 南京别克撞死5人
- 被就业
- 呐喊哥,淹胸妹
那些声音
- 中国的互联网是充分开放的,能看的就看,不能看的就别看——秦刚
- 至于央视,真是没有想到,一个永远在讲真话的媒体,居然会遭受这个创伤,上天无眼。——韩寒针对央视元宵大火
- 你是准备替党说话,还是准备替老百姓说话?——郑州市规划局副局长逯军
- 买房就象买白菜,30年来房价没涨——北京华远集团总裁任志强
- “这事儿不能说太细”“没时间跟你闲扯!”——天津市市政公路管理局规费处副处长刘博;湖北省应城市政府门户网站“市长信箱”
- “我们是有身份的人!”——新疆建设兵团农12师221团副团长陈伟,及其夫人221团医院党支部书记于富琴
- “你是不是党员?”“你是哪个单位的?”“这么小的事你找我啊?”——郑州市财政局预算外资金管理局城建处处长王冠旗;国家游泳运动管理中心副主任、全运会跳水竞赛委员会副主任周继红;安徽霍邱县环保局长雷庆明
- “我是不是拉屎也要告诉你啊?臭不臭也要告诉你?”“你不能因为不服气,就说是‘他妈的’内定,就是‘他妈的’猫腻。”——广州市新光快速路有限公司原项目部部长梁建春、国家体育总局副局长肖天
- “一楼二楼别去啊,要去就去跳五楼。”——承德市双桥区牛圈子沟镇党委书记史国忠
- “上访者99%有精神病”“临时性强奸”——国家卫生部专家委员、北京大学司法鉴定室主任孙东东、浙江湖州南浔法院
- “林嘉祥是一个多年的干部、很好的干部,谁不会有喝醉酒的时候呢?……网络是可以杀人的,可以把黑的说成白的,把白的说成黑的,林嘉祥就是个倒霉蛋……整顿网络的力度远远不够!……我觉得现在的公务员是弱势群体!”——交通部海事局常务副局长刘功臣
- “生活在中国,自己好像天天都在过节。”——全国政协委员吴玉霞
那些ABB
- 楼倒倒、楼断断、楼歪歪、楼劈劈、楼垮垮、楼薄薄、楼强强、楼裂裂、楼轰轰、楼坠坠、楼危危、楼停停
- 躲猫猫
- 桥糊糊
- 路塌塌
那些“门”
- 龙口护士门
- 空姐门
- 车震门
- 章子怡海滩门
- 上海海运艳照门
- 王美莼艳照门
- 建桥门
- 菲律宾女演员卡特里娜-哈利利与华裔医生艳照门
- 慈溪摸奶门
- 脱裤门
- 吃奶门
- 电梯门
- 秋千门
- 摸鸟门
- 跳蛋门
- 劈腿门
- 邯郸大学“做爱门”
- 街头门
- 吉野门
- KTV“裸体门”
- 排便门
- 强拍门
- 网吧门
- 护士门
- 罗曼绮”洗澡门”
- 公交门
- 黄瓜门
- 上海地铁洗手门
- 野战门
- 图书馆飞机门
- 扒衣门
- 南大寂寞门
来源:互联网
- 上联: 空姐走光,是否有机可乘
下联1:姨妈上岗,能否后门通融
下联2:护士加班,早晚虚位以待 - 大爷,给妞笑一个
- 谜面:相亲。打一软件术语。谜底:面向对象
- 谜面:吻。猜一软件术语。谜底:接口
- 多年前我曾提案3月7日为少女节,理由是3月7日跟3月8日只差一日,少女和妇女也只差一日。
- 做为裆的干部,手先要深入裙中,撩解裙中,想裙中之所想,急裙中之所急 办事时深入浅出,要真抓湿干,遇湿俱进,玩枪姘勃。只有善解人衣,把握鸡遇,急鸡进取,坚持不泄 与裙中同进出共性福,才能最终掀起裙中性运动高潮,让裙中满意,让裆放心
- 看到如此雄壮的尾巴,终于明白女生为何爱养猫了
- 要固执地、一个劲地让自己出丑,直到习以为常—-萧伯纳
- 恐惧皆衍生于无知和不确定
- 甲:“听说经济学家总在说谎。你能否告诉我,如何判定他在说谎?”
乙:“经济学家大都比较诚实,很少掩饰。你只要注意他的嘴就行了,嘴一动,他就在说谎。” - 有一天微软拼音被人打伤了,警察询问他事情的经过,微软拼音激动地说:当时搜狗拼音实在打得太快了……
- 偷爸妈的安全套,打一歇后语 回答:装孙子
- 厕所墙上“向前一小步,文明一大步!”用英语怎么翻译? 答: Fire in the hole
- 一群伟大的科学家死后在天堂里玩藏猫猫,轮到爱因斯坦抓人,他数到100睁开眼睛,看到所有人都藏起来了,只有牛顿还站在那里。
爱因斯坦走过去说:“牛顿,我抓住你了。”
牛顿:“不,你没有抓到牛顿。”
爱因斯坦:“你不是牛顿你是谁?”
牛顿:“你看我脚下是什么?”
爱因斯坦低头看到牛顿站在一块长宽都是一米的正方形的地板砖上,不解。
牛顿:“我脚下这是一平方米的方块,我站在上面就是牛顿/平方米,所以你抓住的不是牛顿,你抓住的是帕斯卡。” - 是这样的张总:你在家里的电脑上按了CTRL+C,然后在公司的电脑上再按CTRL+V是肯定不行的。即使同一篇文章也不行。不不,多贵的电脑都不行。
- “恋”是个很强悍的字。它的上半部取自“变态”的“变”,下半部取自“变态”的“态”。
- I wanna 弄爆你 弄爆你 爆菊
- 眼睛蛇和大象约会,寒暄一番后说:“来就来吧,还牵这么大头猪,客气了。”
- 我已经把你们包围了~~~
- 结婚就是从无妻徒刑改判有妻徒刑的过程
- 我喜欢一只动物并非取决于它的毛色、品种什么的,而是取决于佐料和火候。
- 从前有一只熊猫,它到一家饭店点了菜就开始吃,吃完之后掏出一把枪乱放几枪走了。饭店的老板就问它,你为什么要这样做?熊猫就说,你查一下字典。老板发现字典上写着: Panda:an animal,eats shoots and leaves.
- 焦点访谈认为:google,g代表g点,oo代表双乳和睾丸,l代表男性生殖器,e代表英文西化,念起来是“股沟”,它是彻底的低俗、反动、色情。
- 西游记告诉我们:凡是有后台的妖怪都被接走了,凡是没后台的都被一棒子打死了。
- 单位就像一棵爬满猴子的大树,向上看全是屁股,向下看全是笑脸,左右看全是耳目。
- 我是白领:今天领了薪水,交了房租水电,买了油米泡面,摸了口袋,感叹一声,这个月工资又白领了…
- 某日在丹佛机场的一班联合航空班机因故停飞,
机场柜台人员必须协助大批该班机旅客转搭其它飞机。
柜台前排满了办手续的人,这时有一位老兄从排队的人群里一路挤到柜台前,
将机票甩在柜台上并说:“我一定得上这班飞机而且是头等舱!”
服务的小姐很客气的回答:“先生,我很乐意替您服务,但我得先替这些排在你前面的人服务。”
此时这位仁兄很不耐烦的说:“你知道我是谁吗?”
只见那位柜台小姐从容的拿起麦克风广播道:“各位旅客请注意,23号柜台前有一位先生不知道自己是谁,如果有哪位旅客能帮他辨识身份的话,烦请到联合航空23号柜台,谢谢!”
此时排在后面的旅客都忍不住笑了出来。
(还没完………………..!)
这位仁兄把脸一摆,瞪着那位小姐,并说:“Fuck you!”
只见那位柜台小姐露出和气的微笑回答说:“那您也得先排队才行!” - 在职场中就应该像柯南那样,有一种我走到哪就让别人死到哪的霸气
- 一老外想去故宫,不知道怎么走,找人问路,但把故宫、紫禁城两个词儿弄混了:“请问,紫宫怎么走?”第一个人瞪他一眼,没理他,第二个人说“你没病吧?”,第三个人用手一指:“你妈逼。走到头儿。”
- 据说,古书上记载:“丰润少年精液最滋补身子,可常驻容颜。”
- 某人欲拜师学武,至恒山某处,见门前牌匾大书“恒山派”,大为兴奋。近前细看,底下还有“出所”二字
- 傻老五意外瞧见老三撒尿,颠儿颠儿地跑回去对老四说:老四老三老二老大了
- 我做饭还行,基本上吃过的人活下来的都说好
- 唉,其实我也曾青春逼人,可惜现在青春没了,就剩这么个逼人了
- 某哥们儿头天晚上跟女友房事过多,第二天早上起来感叹——囊中羞涩……
- 臣对巨说:别看一样的面积,咱是三室两厅……
- 早听说有句话叫“摸着石头过河”,可最近才知道,是有些人只负责摸石头,另一些人负责过河。
- “直升机不用来了,我骑自行车回去。”——看见一篇叫“人多的地方突然接了个手机,说句什么话能让大家都觉得你很有钱?”的东西。这是其中一句
- 现在你骂我,是因为你还不了解我,等你以后了解了我,你一定会动手打我的。
- 上了年纪最大的好处就是:年轻时得不到的东西,现在你不想要了。
- 女人结婚有什么用? – 有个鸟用。 男同性恋结婚有什么用? – 有个屁用。男人为什么结婚,因为想通了。女人为什么结婚,因为想开了。
- 体贴的男友—男生带着女友散步,路过餐馆。女友赞叹道:“真香啊!”囊中羞涩的男生很绅士地说:“如果你喜欢,我们再从饭馆门前走一次。”
- 作为一个怪兽,我的愿望是至少消灭一个奥特曼。
- 诸葛亮出山前也没带过兵啊,你们凭啥要我有工作经验。
- 泡妞就像挂QQ,每天哄她2个小时,很快就可以太阳了。
- 悟空,为师今夜想要,请速速变成女妖精
- 某党高级干部因经济问题外逃,搞得上级很被动。未料几年后,此干部在外生活困顿,萌回国之意,遂托人问讯组织是否批准回国。肯定回复于法不容,否定回复有碍情理。组织接讯反复研究后回复:出国没有经组织审批,回国亦不需组织审批
- 女:你有房么?男:没问题,我老舅有钱,他可以给我买房子。女:你有车么?男:没问题,这个我老舅也可以帮我买。女:你老舅的手机号是多少?
- 谢天谢地谢亚龙
信神信鬼信兰成
横批:足篮打水 - 村里二傻子老婆长得漂亮。毛主席逝世后,晚上安排社员守灵,支书每天都安排二傻子,他觉得面上很有光。有天别人讲,你夜夜守灵,回去看看你老婆在干嘛!二傻子回家一看支书正同他老婆睡觉。二傻子指着支书哭喊:狗日的,主席都逝世了,你还有心思睡觉,中央禁止一切娱乐活动!
- 一女工家里房屋漏水,请假一天修房。次日,她托人捎假条给单位,领导一看,吓软双腿,假条写到:房事未完,流水太多,无法控制,特请假再搞一天。
- 为什麽别人见我就说操?-因为你太能装B
- 经验就是:当你累积到足够丰富的时候,你发现已经用不上它们了。
- 《换位思考》黄山旅游不见猴子,管理员解释:都在洞里交配。游客抱怨:放些吃的啊,不就出来了。管理员:换成你,肯出来吗?
- 周一早上上班在公司电梯里, 一哥们儿从包里掏出手机看时间,然后嘟囔了一句“我艹!” 大家目光都朝他看去,以为他迟到了。结果发现 他手里拿着一个空调遥控器…
- 读书时一直暗恋她,但没勇气表白,更没胆量碰她。毕业后,她已经结婚了,老公跟我是同学。那天下午,她抱着娃娃在喂奶,我找了个很好的借口。我走到她面前,一把两手按住她的MIMI,然后跟她娃娃说,喊叔叔,不喊不给吃!
- 绅士无非就是耐心的狼
- 嘉宾:我当时都有去跳楼的想法了 鲁豫:那后来跳了么?
- 美国总统奥巴马荣膺2009诺贝尔和平奖,古巴、越南、北韩、利比亚、伊朗、中国领导人向诺贝尔奖委员会发去了感谢电,均称“谢谢你们套牢了他,这下我放心了!”
- 两个中药世家联姻,男姓龙,女姓陈。婚夜两人对联:男出上联:龙骨一根,退烧止痒又生津;女对下联:陈皮两片,化痰消肿还解渴;横批:一日见效。
- 拥挤的北京银行,一女长时间占据取款机,不时打出一张张凭条。我挤在后面的长龙里,等得实在不耐烦,伸头看了一眼,发现屏幕显示“余额不足”,此女仍不停按“取款”钮,收集打出来的凭条。五分钟后,此女手拿厚厚一叠凭条,向洗手间方向走去…自水木社区
- “刘惜君,你唱得太好了,我一定要把你留在10强。但是我投给曾轶可,因为你这么
强,一定可以有机晋级的。” - 等余震的心情,就像初恋的少女等情人,既怕他不来,又怕他乱来
- 当时我正在和女朋友一起查资料,突然蹦出一个窗口,很黄很暴力,我们赶快把灯给关
了。 - 从前,有个小孩说,打死我也不睡觉。然后他被打死了。
- 4年没见到老婆了,她去年给我生了个大胖小子……真想回家看看啊。
- 我朋友的老婆怀孕了,我姓马,求孩子的名字
- 上联:上海自来水来自海上
下联1:日照老年人年老照日
下联2:大波美人鱼人美波大
下联3:黄山落叶松叶落山黄
下联4:明天到操场操到天明
1、环境配置
- 安装Eclipse3.5,Android SDK,ADT插件(Help->Install New Softare->“https://dl-ssl.google.com/android/eclipse”->弹出来的两个都选上->装好重启下),参考“http://androidappdocs.appspot.com/sdk/eclipse-adt.html”
- 配置环境变量,在Path后添加“C:\android-sdk_r3-windows\android-sdk-windows\tools”
2、导入已有项目不要用import,而要用File->New->Android Project,不然Eclipse无法识别为Android项目。
3、模拟器打开后一直开着好了,不用每个程序运行完就关掉,第一次打开模拟器时间较长。
4、在命令行输入adb shell可进入模拟器的Shell环境中,要删除模拟器中自己写的程序,则:cd /data/app –> ls –>rm *.apk。
5、学习资料
- SDK中有很多Sample可以运行
- http://android.toolib.cn/guide/index.php 有API文档和开发向导,有很多教程和范例
- http://www.rbgrn.net/ 有Android 3D游戏开发日志
- http://www.anddev.org/ 最大的英文Android论坛
- http://code.google.com/intl/zh-CN/android/index.html 不过经常性不能访问
- http://www.hiapk.com/bbs/ 最大的中文Android论坛
- http://www.chinaup.org/docs/documentation.html 第二个的中文版
- http://rayleung.javaeye.com/ 关注Android的博客
- http://www.android123.com.cn/ 同上
- http://code.google.com/p/androidbmi/wiki/IntroAndroid 台湾资料
- 《Android A Programmer’s Guide》
- 高焕堂的几本书
- 《Android SDK开发范例大全》
- 《深入浅出Google Android》
- 《Android基础教程》
原文地址:http://www.rbgrn.net/content/215-light-racer-3d-development-journal
================================================
如果你有兴趣为Android平台开发游戏,有很多你需要了解的东西。我是Light Racer,Light Racer 3D以及Wixel的开发者,这些游戏目前在Android Market上有售。我以前也开发过游戏,但Light Racer是我的第一个Android应用程序,我从中学到了很多Android游戏开发知识,也愿意与诸位分享。我甚至写了一本在线的书详细介绍了Light Racer3D的开发,内容全是教你怎样做以及有用的代码片段。如果你有过游戏开发经验,那么转移到移动平台上来将不是特别困难。你主要只需学习其架构以及API就行了。如果你是一名游戏开发新手,我总结了一张列表,上面有你必需知道的东西,供你起步用。这些知识适用于很多类型的游戏,包括动作类、策略类、模拟类和益智类。
Android是一个基于Java的环境。这对初学者来说是个好消息,因为相对于C++,Java被广泛认为是一门更容易上手的语言,它是移动开发的规范。Google也做了一件出色的工作,它将API文档化并提供示例代码供使用。其中有个叫做API Demos的示例几乎展示了所有API的功能。如果你熟悉Java并且用过Eclipse,要让你的第一个应用跑起来那是相当简单。如果你以前从没写过代码,在你前进路上还要学习很多,但别气馁。
获取SDK
新手上路的第一步便是获取Android SDK(软件开发工具包)。SDK里有一个核心类库,一个模拟器,一些工具和示例代码。我强烈建议使用Eclipse和Android Eclipse插件。如果你玩Android的话,Eclipse IDE对Java开发者来说很好用。如果这是你第一次开发Java项目,你可能会需要下载全套JDK,它里面包括签名和部署你的应用程序的一些工具。
学习应用程序架构
别急着一头扎进开发的海洋里,理解Android应用程序架构是很重要的。如果你不学一下,你设计出来的游戏在线下将很难调试。你将需要理解Applications、Activities、Intents以及它们怎样相互联系。Google提供了很多有用的架构信息。真正重要的是要理解为什么你的游戏需要多于一个的Activity,以及什么才是设计一个有良好用户体验的游戏。要理解这些,首先要了解什么是Activity生命周期。
学习Activity生命周期
Activity生命周期由Android操作系统来管理。你的activity创建、恢复、暂停、销毁都受操作系统的支配。正确处理这些事件是很重要的,这样应用程序才能表现良好,做用户认为正确的事。在你设计你的游戏之前了解所有这些是如何工作的是件好事,因为以后你可以为自己节省调试时间和昂贵的重新设计时间。对大多数应用来说,默认的设置将工作正常,但对于游戏,你可能需要考虑将SingleInstance标志打开。当设置为默认时,Android在它认为合适时会创建activity的新实例。对于游戏来说,你可能只需要一个游戏activity的实例。这对于你要怎样管理事务的状态有些影响,但对于我来说,这解决了一些资源管理的问题,应予以考虑。
主循环
根据你写的游戏的类型,你可能需要也可能不需要一个主循环。如果你的游戏不依赖于时间或者它仅仅对用户所做的加以回应,并且不做任何视觉上的改变,永远等待着用户的输入,那么你就不需要主循环。如果你写的是动作类游戏或者带有动画、定时器或任何自动操作的游戏,你应该认真考虑下使用主循环。
游戏的主循环以一个特定的顺序通常尽可能多的在每秒钟内“滴答”提醒子系统运行。你的主循环需要在它自己的线程里运行,原因是Android有一个主用户界面线程,如果你不运行自己的线程,用户界面线程将会被你的游戏所阻塞,这会导致Android操作系统无法正常的更新任务。执行的顺序通常如下:状态,输入,人工智能,物理,动画,声音,录像。
更新状态意思是管理状态转换,例如游戏的结束、人物的选择或下一个级别。很多时候你需要在某个状态上等上几秒钟,而状态管理应该处理这种延迟,并且在时间过了之后设置成下一个状态。
输入是指用户按下的任何键、对于滚动条的移动或者用户的触摸。在处理物理之前处理这些是很重要的,因为很多时候输入会影响到物理层,因而首先处理输入将会使游戏的反应更加良好。在Android里,输入事件从主用户界面线程而来,因此你必须写代码将输入放入缓冲区,这样你的主循环可以在需要的时刻就从缓冲区里取到它。这并非难事。首先为下一个用户输入定义一个域,然后将onKeyPressed或onTouchEvent函数设为接到一个用户动作就放到那个域里,有这两步就够了。如果对于给定游戏的状态,这是一个合法的输入操作,那么所有输入需要在那一刻做的更新操作都已经定下来了,剩下来就让物理去关心怎样响应输入吧。
人工智能所做的类似于用户在决定下一个要“按”哪个按钮。学习怎样写人工智能程序超出了这篇文章的范围,但大体的意思是人工智能会按照用户的意图来按按钮。这些也有待物理去处理和响应吧。
物理可能是也可能不是真正的物理。对于动作类游戏来说,关键点是要考虑到上一次更新的时间、正在更新的当前时间、用户输入以及人工智能,并且决定它们朝着什么方向发展和是否会发生冲突。对于一个你可视化地抓取一些部件并滑动它们的游戏来说,物理就是这个游戏中滑动部件或者使之放入合适的位置的部分。对于一个小游戏来说,物理即使这个游戏中决定答案是错还是对的部分。你可能将其命名为其他东西,但每个游戏都有一个作为游戏引擎的红肉部分(译者注:可能是主体部分的意思),在这篇文章里,我把这部分称为物理。
动画并非像在游戏里放入会动的gif图片那样简单。你需要使得游戏能在恰当的时间画出每一帧。这并没有听起来那么困难。保留一些像isDancing、danceFrame和lastDanceFrameTime那样的状态域,那样动画更新便能决定是否可以切换到下一帧去了。动画更新真正做的事就那么多。真正来显示动画的变化是由录像更新来处理的。
声音更新要处理触发声音、停止声音、音量变化以及音调变化。正常情况下当写游戏的时候,声音更新会产生一些传往声音缓冲区的字节流,但是Android能够管理自己的声音,因而你的选择将是使用SoundPool或者MediaPlayer。它们都需要小心处理以免出错,但你要知道,因为一些底层实现细节,小型、低比特率的声音文件将带来最佳的性能和稳定性。
录像更新要考虑游戏的状态、角色的位置、分数、状态等等,并将一切画到屏幕上。如果使用主循环,你可能需要使用SurfaceView,并做一个“推”绘制。对于其他视图,视图本身能够调用绘制操作,主循环不必处理。SurfaceView每秒产生的帧数最多,最适合于一些有动画或屏幕上有运动部件的游戏。录像更新所要做的工作是获取游戏的状态,并及时地为这个状态绘制图像。其他的自动化操作最好由不同的更新任务来处理。
代码看起来是什么样的?这儿有个例子。
1: public void run() {
2: while (isRunning) {
3: while (isPaused && isRunning) {
4: sleep(100);
5: }
6: update();
7: }
8: }
9:
10: private void update() {
11: updateState();
12: updateInput();
13: updateAI();
14: updatePhysics();
15: updateAnimations();
16: updateSound();
17: updateVideo();
18: }
3D还是2D?
在开始写游戏之前,你要决定是做3D的还是2D的。2D游戏有一个低得多的学习曲线,一般更容易获得良好的性能。3D游戏需要更深入的数学技能,并且如果你不在意的话会有性能问题产生。如果你打算画比方框和圆圈更复杂的图形,还需要会使用3D Studio和Maya那样的建模工具。Android支持OpenGL用来3D编程,并且在OpenGL方面有很多很好的教程可供学习。
建立简单、高质量的方法
上手时,要确保你整个游戏不要就用一个庞大而冗长的方法。如果你遵循我上面描述的主循环模式,这将相当简单。每个你写的方法应当完成一个非常特定的任务,并且它就应该无差错地那样做。举例来说,如果你需要洗一副纸牌,你应该写一个“shuffleCards”的方法,并且该方法就应该只做这一件事。
这是一个适用于任何软件开发的编码实践,但对于游戏开发来说这尤为重要。在一个有状态的、实时的系统里,调试将变得非常困难。使你的方法尽量的小,一般的经验法则是每个方法有且仅有一个目的(译者注:完成且仅完成一个功能)。如果你要为一个场景用编程方式画一个背景,你可能需要一个叫做“drawBackground”的方法。诸如此类的任务能够很快完成,因而你可以按照搭积木的方法来开发你的游戏,而你能够继续添加你要的功能,并且不会使得这一切难以理解。
最重要的是效率!
性能是任何游戏的主要问题。我们的目标是使得游戏的反应越快越好,看起来越流畅越好。某些方法如Canvas.drawLine比较慢。并且要将屏幕大小的位图画到主画布上,每一帧都是代价昂贵的。如何权衡对于达到最佳性能很有必要。确保管理好你的资源,使用技巧来以最少量的CPU资源完成你的任务。如果性能不好的话,即使是最好的游戏玩起来也没劲。人们一般对于游戏卡或者响应慢几乎难以容忍。
提示和技巧
看一下SDK中的示例LunarLander。它使用SurfaceView,这对于一个每秒需要处理最多帧的游戏来说是合适的。如果你要做3D,示例中有GLView可以处理3D显示的很多初始化工作。对LightRacer来说,我不得不优化把所有东西都画出来这种方法,否则帧率将会大大地降低。我只在视图初始化的时候把背景画进一个位图里一次。路径放在它们自己的位图里,随着车手的前进而更新。这两个位图在每一帧里都被画进主画布中去,车手画在顶端,到最后会有一个爆炸。这种技术使得游戏运行在一个可以玩的程度。
如果适用的话,使得你的位图的大小精确等于你打算画到屏幕上的大小,这也是个好的实践。这么做了以后就需要缩放,可以节省CPU资源。
在游戏中始终一致的位图配置(如RGBA8888)。这将会通过减少不同格式之间转换的时间来节省图形库的CPU时间。
如果你决定开发3D游戏但没有3D方面的知识,你需要挑选一两本3D游戏编程方面的书并学习线性代数。你最少要理解点积、叉积、向量、单元向量、法线、矩阵和变换。这方面我遇到的最好的书是叫《3D游戏编程和计算机图形学数学》。
声音文件要小而且低比特率。需要加载的越少,加载速度越快,游戏所需内存越少。
声音使用OGG文件,图片使用PNG文件。
确保释放所有媒体播放器,当Activity销毁时空出所有的资源。这能保证垃圾收集器清除了所有东西,也能保证在两次游戏开始之间没有内存泄露。
加入Android谷歌小组,寻求社区支持。这里有人可以在开发过程中给你帮助。
最重要的是,花时间测试再测试,确保每一小部分都如你所愿地工作。改善游戏是整个开发中最耗时最困难的部分。如果你匆匆将其推向市场,你很可能会使用户们失望,你会感到你的努力都白费了。你不可能使所有人都喜欢你写的东西,但你至少要尽量发布你最高质量的作品。
在Light Racer 3D开发日志可以找到可工作的示例代码和指导。
原文地址:http://blog.csdn.net/JiangBo_HIT/archive/2009/11/15/4813433.aspx
================================================
今天尝试编译Android SDK中APIDemos中的程序,调试到HelloGallery的时候,在下面这段代码中:
1: public ImageAdapter(Context c) {
2: mContext = c;
3: TypedArray a = obtainStyledAttributes(android.R.styleable.Theme);
4: mGalleryItemBackground = a.getResourceId(
5: android.R.styleable.Theme_galleryItemBackground, 0);
6: a.recycle();
7: }
编译出错,提示说android.R.styleable unresolved,在网上查了下,说R.styleable在SDK1.5中已经不再支持,所以会出现这个错误。解决方法如下:
1.在res/values目录下新建attrs.xml,在其中添加如下内容:
1: <?xml version="1.0" encoding="utf-8"?>
2: <resources>
3: <declare-styleable name="Gallery">
4: <attr name="android:galleryItemBackground">
5: </attr>
6: </declare-styleable>
7: </resources>
2.修改HelloGallery.java,将出错的那段代码:
1: public ImageAdapter(Context c) {
2: mContext = c;
3: TypedArray a = obtainStyledAttributes(android.R.styleable.Theme);
4: mGalleryItemBackground = a.getResourceId(
5: android.R.styleable.Theme_galleryItemBackground, 0);
6: a.recycle();
7: }
修改为:
1: public ImageAdapter(Context c) {
2: mContext = c;
3: TypedArray a = obtainStyledAttributes(R.styleable.Gallery);
4: mGalleryItemBackground = a.getResourceId(
5: R.styleable.Gallery_android_galleryItemBackground, 0);
6: a.recycle();
7: }
3.重新运行就可以了