2005年10月18日

小日了一把wow,感觉这的确是个与众不同的东东。想起来以前在csdn上看n多人谈网游的前景,大多说市场差不多饱和了,差不多模式化了云云。但是,blizzard的东西一来,不管你如何饱和,韩国泡菜还是得靠边站,市场还得让出来。不是说韩国泡菜不好,韩国的游戏业的确是有目共睹的,钱也捞得数不尽了。但是,不得不说,泡菜在游戏模式上鲜有突破。模式化的练级打怪,已经被证明很难再吸引玩家了。韩国人似乎没有改变这个模式的意思,他们在风格上下的功夫到不少,卡通的,耍酷的,造型倒是各种各样,但是作为游戏本身来说,已经鲜有游戏性在里面了,支撑整个游戏的只是等级和装备,趣味性寡然,很多人以为,网游发展到这种样子,已经鲜有突破了,都觉得就是这回事了。然而,事实证明一切。不得不赞下blizzard的designers

其实支撑wow的个人以为有2点,一者,任务模式。看看泡菜,大多是轻视任务这个概念的,获取经验基本依靠打怪。打多了,重复次数多了,难免寡味。换一种方式,既能打怪,又能做任务得经验,不是一举两得?再进一步说,其实网游有个很大的弊病:缺乏全局目标性。单机游戏有全局目标,比如拯救世界,拯救爱人等等,整个游戏的最终目的是玩家可以企盼的,也是可及的。而网游却不然,没有明确的目标,即使有,也不为很多人知道,很多玩家只知道杀怪—提升等级—-pk或者打更厉害的怪,如此往复循环,直到等级封顶。在这样一个过程中,没有既定的目标,只有玩家自己定的目标,比如等级练到多少,装备拿到多少,前者还好说,无非时间罢了。后者就不好说了,rp不是每时每刻都那么好使的。在一次一次的失望之后,游戏的积极性还能不能保持住,这还是个问题。利用任务,在短期设置一些可达的目标,的确是个不错的主意。完成每个任务后,一点经验,一点装备,一点钱,一些小小的成就感,依靠这些作为动力,推动玩家进一步冒险。更值得一提的是,每个任务好像一个小故事,任务完成之后npc的反映和动作,都是比较亲切的。就好像真的帮了他们一个忙一样。不得不说,在这点上,blizzard改善了游戏体验方式,维持了玩家的积极性。

二者,世界体系,也是最为突出的一点。韩国泡菜最大的弊病,缺乏游戏底蕴。就好像速泡面一样,刚开始吃觉得味道还蛮好,吃多了难免腻味。一样的道理,rpg游戏没有底蕴是很难长久生存下去的。rpg就是依靠故事和剧情来支撑游戏的。一个虚弱无力的世界体系,又怎么能支撑起整个游戏?不得不再次感叹,blizzard很会利用自己的优势。warcraft系列是早就深入人心的作品,从warcraft2开始,玩家就对此系列乐此不疲。warcraft3更是将此系列推向了顶峰。任何质疑warcraft3在玩家心中地位的行为都是愚蠢的。那么对于wow来说,已经有人为其铺平了道路,顺着道路走进去也就是顺理成章的事了。无需过多的解释,很快就能熟悉人设,很快就能进入角色,一切的一切都是那么自然而然。不说游戏,光光是这个艾泽拉斯大陆的故事就足够吸引人了。得人心者得天下,还需要更多的理由么?

网游发展至此恐怕又是一个里程碑了,从最开始的传奇掀起网游热潮到现在wow的席卷网游市场,游戏变了,玩家变了,制作人的想法变了。现在wow大红大紫,我敢打赌,不久的将来,或许是很近的将来,很快会有类似的作品出现,继续着模式化的道路,只是这次不是以前的泡菜模式,而是wow模式。虽然这未必是坏事,或许这样能够更加完善和发展这个模式,但是还是那句话,创新才是王道。不要到最后,又是等着blizzard来做这件事。

等着瞧吧。

2005年09月27日

哎,我承认这个游戏比较幼稚,但是既然被贴了,那就写下好了,免得又被说54同学-_-

好吧,其实本来是前几天要写的,正好这几天忙着弄wince,就给耽搁了,呵呵,ok,开始吧。

游戏规则:规则很简单,开始游戏的人出一个題目,在自己的blog上写下答案,然後把題目丟給另外五個人,在文末附上這五个人的链接,並且到這些人的留言版上留下:「你被貼了。」這五個被tag到的人,在自己的blog注明是從哪一個blogger那裡傳來的題目,然後寫下答案,再去貼另外五個人。如此繼續下去。

我被Yvette贴了,好吧,那就展现下我的阴暗面好了,嘿嘿

1、非常反感听到刮玻璃的声音,听得我心哈毛,难过得要死。不过奇怪的是,我同学对于这个声音倒是没什么,他倒是对于刮木梳的声音比较敏感,就是那种塑料的梳子,然后用手作弹拨装,发出那种声音,他会抓狂的。

2、接着上面那个,我就喜欢没事情发发那种声音,看他抓狂我会异常的爽。。。-_-我真邪恶。。。

3、在没人的地方我会变得特别邪恶,甚至想拿起凳子来砸人。。。不过只是在很少的时候才有这种情况,莫非是恶魔的意识?好吧,我承认,我不是恶魔猎手。。。。我不会变身

ok,就这么些,照例要贴别人,那就贴我友情链接上的那些个兄弟姐妹吧,当然,规定应该有说是不能循环的,所以那些源头(比如ann和Yvette)就免了,呵呵。

ps:今天比较郁闷,说起来五月天要来我们学校的事情我也很早知道了,但是嘉定校区一直没领票的消息,我就纳闷了,昨天本部领票了,但是嘉定校区却依旧没消息,真如我同学所说的,嘉定校区的就像是后妈生的,什么东西都得挨在别人后面。。。所幸一直没消息也就罢了,但是前面下去吃饭的时候竟然看到食堂前面贴通知说今天中午在综合楼领票。。。。。我就默了,我中午咋就没看到呢。。。想起了F1志愿者的事情,于是也就释然了——–黑幕是永远揭不开的。没啥可说的。就是对不住小a了,本来想拿张票给你的,事先没跟你说,想给你个惊喜,知道你喜欢五月天,哎。。。啥都不说了T_T

2005年09月17日

就快要中秋节了,在这个中秋节的前夜,百无聊赖。天上月亮看不太清,不知道是不是因为窗前不远处的各种灯光掩蔽了本该照明床前的月光。虽然将近深夜,但qq和msn上还是有不少人。大抵都是不太熟悉的。在这一个个光鲜无比的头像后面的人,他们在干什么呢,和同学叙旧,还是和朋友聊天,我不得而知。我不愿意打扰他们,即便是在周末如此美妙的时光外加中秋无比和谐安逸的气氛里,我还是选择在各大bbs和mop里闲逛。小a和小y没上线,感到有点无聊。

看了很多人的blog,突然发现别人的文笔竟然都是这么流畅,而我却对文字越来越陌生了。说我平时写得少也好,没有文学细胞也罢,总之就是这样一个现实。代码越写越多,字越写越小。我能感觉到我的文字能力在慢慢的从指尖溜走。专业的东西看得多了,艺术的东西看得少了,技术的读得多了,文学的读得少了,难道真的是此消彼长么。说起来,我很早以前就向往吟游诗人的生活了,虽然这可能只存在于虚幻的世界里,但是依然令我神往不已。且行且唱,快意自由。可惜在这个功利化,现实化的社会里,这可能也只能存在于美好的幻想中。或许韩寒,或许郭敬明是这种生活在现实生活中的妥协和平衡,但是毕竟能有多少韩寒,多少郭敬明呢。日子该怎么过还得怎么过。逃也逃不掉。

9.17 / 0:06,真正中秋了,想来大学3年,也只有今年的中秋是在家里过的。在远离亲人的中秋节里,只能过着形似而神不似的中秋,百般滋味在心头啊。今天是老天的恩赐,得以在家中和亲人们共聚一堂,没有理由不开开心心,快快乐乐的过中秋。在这里也祝我的那些远在他乡的朋友们,以及大学里的那些同学们,说一声,中秋快乐。

要去睡了,明天还要早起,看看那个所谓的百度之星的程序设计比赛,但愿能有好运气。

海上升明月,天涯共此时,在这凌晨安逸的气氛中,祝大家中秋节快乐。

2005年09月05日

终于还是9月份了,终于还是只剩一个星期了,终于还是要开学了。就像那句老话,快乐的时光总是过得飞快。尽管我一再的期盼暑假慢慢过,但是它却丝毫没有停滞的意思。其实不仅仅是暑假,每次放长假,五一也好,十一也罢,时间总是过得n快,等到还剩下一天了,我才突然发现,假期再次告罄了。我每次都想着这次我一定要看看到底怎么会过得这么快,而每次总是在惊诧与不解中结束我的假期生活。

和同学赌了一下,看嘉定黄渡校区会不会在这学期变得稍微好一点,我不敢奢望,能变得好一点我已经谢天谢地了。结果很快就将揭晓,不知道我能不能对此抱有希望。对于暑假里造的惊天动地的那个跨街天桥,我倒是有点期待的,我倒想看看那个传说中的天桥到底是何尊容。新学期会有很多本部的弟兄搬过来。8大学院到来意味着人数的暴增,人多了,问题也会呈几何倍数增长。真不知道会有什么样的鸟问题等着我。就目前而言,我可以预见的问题就是食堂了,nnd,这么多人,1个食堂会死人的。。。。。。草菅人命阿。。。T_T

开学就是大三,课程多就不说了,实习的压力会慢慢的加大了。以前期待着快点去实习,快点去工作,现在越是临近那种生活,就越是有种畏缩。看来人还真的是安于现状,在一种状况下呆得久了,就会懒于改变。不过幸好我的适应能力还是不错的,那就畅快的来吧。还是那句话,来吧,来得更猛烈些吧。

心情纷乱,无以为绪。取水饮之,乱尤甚矣。遂罢。

2005年08月26日

blog真的相当于摆设了,很少有更新。其实并不是我懒,我不是一个什么事都喜欢写下来的人,所以有时候即使有些想法,我也喜欢要不就当面交流,要不就放在心里自己想。所以,一来一往,记录下来的东西真的屈指可数。有时候想想,是不是也应该留点痕迹下来呢?不管怎么样,总是经历吧,即使留着以后看看应该也是一种不错的选择。或许我真的会慢慢开始写点东西了。不过还不太习惯,呵呵。。。

前天和朋友们出去玩了,真的很开心。见到了老同学,发觉她们变化不太大。都还能基本上一眼就认出来-_-|| 两个人一个小黑,一个小白,厚厚。恩,要不以后就叫小黑小白吧,真素不错的名字,嘿嘿。这次见识了传说中歌后的实力,厚厚,果然不同凡响,我有点后悔没问她们要签名了。。。哎呀,真的失策。不过时间真的很快,美妙的时光总是过得那么快,哈哈。

哎,想想时间过得还真快,一转眼暑假又接近尾声了。军训的军训,返校的返校。大二的暑假就这样悄无声息的从我指间流过,屈指算来,这应该是最后一个还有悠闲时光的暑假了。开学就终于要奔三了,相信也会异常的忙碌。而大三的暑假注定是属于实习的,呵呵。

管它呢,先暂时无视,索性离开学还有段时间,哈哈。总算还有个缓冲,也。

哎,昨天听了nepia的那个歌,结果现在神经错乱了,变弱智了。。。。那个谁谁谁,你要负责的,叫我听这首歌。。。-_-b  脑子里面一团浆糊了,罢了罢了,就酱紫了,待我日后再来,嘿嘿。

2005年08月16日

总算有了点时间体验了下伊苏6,果然还是法尔康的一贯风格。这次是我第一次玩法尔康的3d产品,以前英雄传说系列都是2d画面的(没有玩6,玩到5,海之槛歌),不过THE ARK OF NAPISHTIM的表现还是一如既往的出色,也不枉我支持法尔康一场,呵呵。

我一向是喜欢收集道具的,我刚玩的时候看到这次THE ARK OF NAPISHTIM中道具栏中的物品是固定的,小小开心了一下。因为固定的栏格说明了有可能可以完全收集道具。嘿嘿,后来的事实也证明了我的猜测。好了,废话少说,贴出道具取得地点,以及一些比较难取得的道具的取法及地点。

所涉及所有图片均为网上搜得,特此声明

1.木雕手镯 STR+2,DEF+2 游戏剧情自动发生小伊送的礼物,在打完迷走之龙之后,去往祈祷之泉之前。
2.艾美拉小锤 水晶获得+50% 在利摩奇酒吧用卡普拉神水和坐在诗人对面的那个精灵人(实在忘了叫啥了- -)交换。
3.盗贼手套 Gold获得+50% 拿到火剑后,到桥头的精灵碑和修桥的人说话,他会说桥头有魔物消灭魔物后,再和他说话,之后利摩奇商会和商人的助手说话
4.幸运银币 幸运值增加 在日出港湾的海盗船拿到海盗烈酒(取得方法见附七),给精灵村的渔夫,他会给你一个项链,在把这个项链给利摩奇酒吧的那个罗门帝国商人,他会说这是他们家的遗物,从而送你幸运的银币。在这之前,如果直接拿海盗烈酒和罗门商人讲话的话,他会问你能否卖给他,如果卖了就无法得到幸运的银币
5.曙光守护者 死后复活一次 打退帝国军舰的进攻后,到风见之丘,日出港湾,忘却的遗迹,剑之祭坛,在这四处可分别得比卡多一只,将比卡多一只一只的带回给利摩奇的艾里米奥(就素那个养比卡多的),注意:一次身上只能带一个比卡多
6.虹之碎片 照亮周围,看见隐藏物 得到雷剑后,开启遗迹内黄色的门
7.无音之铃 让绿水洞的蝙蝠变弱 打倒平原的蜜蜂头目后,在出现的宝箱内取得
8.魔力披肩 魔力计量表上升速度变快 在忘却的遗迹中装备虹之碎片,然后从四根柱子中间跳下,可见隐藏的台阶,跳上即可进入一间小房间,里面有本游戏最强的boss,对于刚刚打到忘却的遗迹这里的玩家来说,是不可能打的过的(不修改的话),所以争取在被打死之前拿到宝物就闪人吧,不行就多试几次。具体见附
9.帝国星光勋章 经验值获得+50% 在提督尸体上找到罗门钥匙,然后到帝国舰队旗舰船长室开宝箱
10.血之爪 打倒敌人时可+5HP 忘却的遗迹中从某个缺口跳下,具体见附
11.艾玫拉司皇冠 MaxHP+50%,幸运值增加 打退帝国军舰的进攻后,打倒风见之丘的花boss
12.艾玫拉司手套 STR+5 DEF+5 打退帝国军舰的进攻后,打倒平原的蜜蜂boss
13.艾玫拉司护膝 DEF+5,不动可回复体力 打退帝国军舰的进攻后,打倒绿水洞内的水母boss
14.过重腰带 DEF+6,附加过重状态 忘却的遗迹内第一个场景,从靠近门的栏杆缺口往下跳,具体见附
15.龙神兵之手 STR+10,DEF-10 忘却的遗迹中从某个缺口跳下,具体见附
16.伦比亚斯 防止混乱状态 前往风见之丘的路上的宝箱中
17.防咒护符 防止诅咒状态 利摩奇商店有售
18.精灵护靴 防止过重状态 前往剑之祭坛的途中的某个宝箱中
19.白蛇手镯 防止中毒状态 利摩奇商店有售
20.翼神纹章 防止所有状态异常 收集五个石板后,向利摩奇酒馆的诗人交换,注意在交换之前要先让诗人把5个石板全部解读一遍

收集5个石板:
1.青之石板 前往剑之祭坛路上的某个宝箱,具体见附
2.赤之石板 忘却的遗迹内的某个宝箱
3.金之石板 绿水洞某个宝箱,具体见附
4.黑之石板 在忘却的遗迹里,装上裝上虹之碎片以后,在拿到"装饰栏增加一格"的那个宝箱的平台左方会出现隐藏的跳台,跳过去后,最后一个用雷剑的冲刺(连点攻击)冲过去就OK了,具体见附
5.白之石板 废都内的某个宝箱

附一:

金之石板的取得方法:

请在绿水洞中按照以下顺序通过场景:
如果从入口进入:上,上,上,上,右,上,右,上,左,左,左,左,上,上;
如果从中央进入:下,下,右,右,上,左,左,左,左,上,上

具体场景图片如下:

附二:

青之石板的取得方法:

具体场景见图:

附三:

魔力披肩龙神兵护手的取得方法:

具体场景见图:

附四:

血之爪的取得方法:

具体场景见图:

附五:

黑之石板的取得方法:

具体场景见图:

附六:

过重腰带的取得方法:

具体场景见图:

附七:

海盗烈酒的取得方法:在绿水洞打完boss之后,从boss的口中出去,会看到海盗船,在船上的一件房间内(此房间内有一个老人和一个黑色的猫),有一个宝箱,打开即可得到海盗烈酒

2005年07月27日

闲来无事,翻译篇msdn上的文章,咳咳。

>>>>>>>>>>>> 我就素传说中的分割线 <<<<<<<<<<<<<<

在Direct3D保留模式下清除深度缓冲区

在Direct3D中,IDirect3DRMViewport::Clear()会清除一个保留模式视口的深度缓冲区以及目标渲染表面。你不能调用这个函数仅仅来清理深度缓冲区。如果你需要清理深度缓冲区而不调用IDirect3DRMViewport::Clear(),那么你需要从保留模式的视口中析取出立即模式的视口,并且使用立即模式中底层的清理函数来仅仅清理深度缓冲区。

一系列普通保留模式下渲染步骤应该如下:

scene->Move(D3DVALUE(1.0));
view->Clear();
view->Render(scene);
rmdev->Update();

如果你想要在不清理目标表面的情况下进行渲染,那么你不必调用Clear()。如果你这么做,你的深度缓冲区将不会被清除,并且你的那些对象不会被正常的渲染。如果你通过保留模式视口取得了立即模式视口,那么你能够清除深度缓冲区却不清除渲染目标。调用Direct3DRMViewport::GetDirect3DViewport() 来重新得到Direct3D立即模式视口。然后调用立即模式视口的Clear()来清除深度缓冲区。通过设置D3DCLEAR_ZBUFFER标志,调用IDirect3DViewport::Clear()能够使你完成这一切。

以下代码向你展示了如何修改渲染调用来完成这个功能:

LPDIRECT3DVIEWPORT d3dview;

scene->Move(D3DVALUE(1.0));
view->GetDirect3DViewport(&d3dview);

int clearflags;
D3DRECT rc;
clearflags = D3DCLEAR_ZBUFFER;
rc.x1 = rc.y1 = 0;
rc.x2 = 640;
rc.y2 = 480;
d3dview->Clear(1, &rc, clearflags);

view->Render(scene);
rmdev->Update();

注意:
IDirect3DRMViewport::Clear()同样也清除保留模式dirty-rectangle列表。如果你使用以上技术,dirty-rectangle列表将不会被清理。这将导致在特定情形下程序性能的降低。因此,在清理dirty-rectangle列表之后,调用IDirect3DRMViewport::Clear()是适当的时机。

2005年07月04日

What’s Gimbal Lock?

Gimbal lock is the phenomenon of two rotational axis of an object pointing in the same direction. Actually, if two axis of the object become aligned, then we say that there’s a gimbal lock. In other words, a rotation in one axis could ‘override’ a rotation in another, making you lose a degree of freedom.

How Gimbal Lock occurred?

Generally speaking, it occurred when you rotate the object which only use Eular Angles to denote it. The reason for this is that Eular angles evaluate each axis independently in a set order. Let’s see a certain scene. First the object travels down the X axis. When that operation is complete it then travels down the Y axis, and finally the Z axis. The problem with gimbal lock occurs when you rotate the object down the Y axis, say 90 degrees. Since the X component has already been evaluated it doesn’t get carried along with the other two axis. What winds up happening is the X and Z axis get pointed down the same axis.

Here’s a pic showing what happened: 

Maybe it’s a bit difficult to understand. OK, let me show you a real sence.

Say that we have a telescope and a tripod to put the telescope on. The tripod is put on the ground. The top of the tripod holding the telescope is leveled with the horizon (reference plane) so that a vertical rotation axis (we call it X axis) is perfectly vertical to the ground plane. The telescope can then be rotated around 360 degrees in X axis so that it can scan the horizon in all the directions of the compass. Zero degrees azimuth is usually set toward a heading of true north. A second horizontal axis parallel to the ground plane (we call it Y axis), enables the telescope to be rotated in elevation upward or downward from the horizon. The horizon is usually set at zero degrees and the telescope can be rotated +90 degrees upward in elevation so that it is looking straight up toward the zenith or rotated -90 degrees downward so that it is looking vertically at the ground plane.

OK, that’s all we needed. every point in the sky (and the ground) can be referenced by only ONE unique pair of X and Y readings. For example an X of 90 degrees and Y of 45 degrees specifies a point exactly due east of the telescope and in a skyward direction half way up toward the zenith.

Now let me show you how the gimal lock occurred. We detect a high flying aircraft, near the horizon, due east from the telescope (X = 90 degrees, Y = 10 degrees) and we follow it (track it) as it comes directly toward us. The X angle stays at 90 degrees and the Y angle slowly increases. As the aircraft comes closer the Y angle increases more rapidly and just as the aircraft reaches an Y of 90 degrees (exactly overhead), it makes a sharp turn due south. We find that we cannot quickly move the telescope toward the south because the Y angle is exactly +90 degrees so we loose sight (loose track) of the aircraft . We have GIMBAL LOCK!

It’s a example of 2D coordinate frame. It’s very similar in 3D frame. We say that you have a vector which is parellel to the X axis. And we rotate it around  Y axis so that the vector is parellel to the Z axis. Then we find that any rotations around  Z axis will have no effect on the vector. We say that we have a GIMBAL LOCK

References

Quaternion Powers in GameDev.net

EularQuats in anticz.com

========================================

以上内容均为原创,若要转载,请注明出处

2005年05月26日

辛辛苦苦把css风格终于弄好了,嘿嘿,爽~

突然发现gmail有蛋了,所以有需要的吱一声,恩

2005年05月14日

这次来看看关于java的I/O 

首先java的输入输出给我的第一个感觉就是比较庞杂,不像c/c++那么精简,在java里,输入输出有很多类,一不小心就会陷入迷魂阵,呵呵。

静下来看一看,其实这么多I/O类,其实都归结于两大类:字符型I/O和字节型I/O

那些以stream结尾的,比如OutputStream系列拉,InputStream系列拉,都是属于字节型的,都是处理byte数据。所以他们的缓冲区都是由byte型的数组构建的。输入输出一般均为int型数据。字节型输入输出一般用来处理非文本数据,比如图像等等。

而那些以reader或writer结尾的,比如FileReader,FileWriter等等,则属于字符型,处理的是char型数据。他们的缓冲区由char型数组构建。输入输出为char或String型数据。字符型输入输出一般用来处理文本数据。

再仔细分析一下。

这两大类输入输出都是需要配套使用的。所谓配套就是输入和输出必须均属于同一类,而不能输入为字节型,输出为字符型。如果要不配套使用,则必须进行转换。比如对于System.in这样的字节型输入流,如果要将其转换为字符型,则必须使用InputStreamReader类进行转换。

BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));

这里就将System.in转换成字节型输入,并且用BufferedReader将其包装起来,使其拥有缓冲区。

说到了封装,就来看看JAVA I/O中的包装。

我们时常会看到一些很长的转换,好像比较恐怖。其实,在JAVA I/O里面,为了达到某一个目的而进行一层甚至数层的包装都是很常见的。比如:

PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IO.out")));


首先,输出目的地是文件IO.out,所以最内层包装的是FileWriter,建立一个输出文件流,接下来,我们希望这个流是缓冲的,所以用BufferedWriter来包装它以达到目的,最后,我们需要格式化输出结果,于是将PrintWriter包在最外层。

说形象点就像管道之间的连接,大口径的管道要连接到小口径的管道上,就必须使用转换,而如果要使管道拥有一些特性的话,那就必须在管道外再包上一层附属物,从而使其拥有某种所期望的特性。

至于java I/O的输入输出流的重定向,就是用了

System.setIn(InputStream in)和System.setOut(PrintStream out)这两个函数。

从而实现将自己定义的某个字节型输入/输出流代替标准输入/输出流。

我这里说的只是自己的学习心得,关于更多的内容,请参考sun公司的doc文档,那才是王道啊,呵呵