昨晚因为刚看过Fate/Zero,随便翻看了评论若干,发现空之境界终章不知何时已经推出。于是补习之。我承认初次观看对于空之境界并无膜拜之感,向来认为月世界的独特之处在于与现实世界的紧密联系,也正因为如此,少了更深的沉浸体验。但在对Fate/Zero的不满意下,反观空之境界,无法不觉得其是一部极其优秀的作品。尽管若干章节仍旧在我的期待以下,——我所谓的期待以下是指,令我感到“仍旧不过如此”,一般说来,源自新异刺激的不足,比如荒耶宗莲又沦为无聊的boss,——但精彩的人物设定,颇有后现代叙事风格,对于荣格与佛教概念的把握等,都令人满意。
仅以“空之境界+分析”搜索,即可看到许多冗长的伪学术分析。我将之称为伪学术,是由于无论多么详尽,或者摆上一堆参考文献,仍旧缺乏学术研究的基本要素,譬如鲜明新颖的论点。于是感觉,无论如何,还是再读原著为上。因此,我并不想在文本工作尚不扎实的现在去做这种徒劳的努力,仅将我的观感呈上。
通常,优秀作品难免令人产生情感投射。这种情感投射往往并不以绝对的相似为出发点,而是在于基本的共情:孤独、无力、难于理解等。诸如此类的情感体验任何人都曾经历,于是能够轻易认同。在缺乏游戏中化身的对应的情况下,其他类型艺术作品往往采取多点式移情,即任何角色都要体现出其人性的一面,以博得观众同情。
在这一部作品中,我的情感投射被集中于两仪式这一人物之上。——两仪式,指的是式,而非织,亦非作为肉体存在的境界式。这种情感投射的来源当然并非杀戮本能,而是那种无论如何被控制的感觉,以及对于黑桐干也的重要性的认知。当然,那种杀戮本能也好,被控制的感觉也好,在终章都得以解释。起源,——初次获知这一概念的作为佛教徒的我立刻将之理解为业——当然,基于荣格心理学的解释完全可以,重要的是那种被控制感以及由此带来的深深的苦痛。
然而,终章将式的责任抹去,以境界式作为杀戮本能的来源,于是式成为一个无辜的受害者。——如同黑桐干也所相信的那样。业这一概念却并非如此。这是由你自己造成,因而必须自己承担的责任。当然,造成它的或许是你的前世,甚至前世的前世。但并不能够因为这一点,而否认,那个人是你。
终章这样评价黑桐干也,“多么……孤独啊……”。我才惊觉自己在很长时间里忘记了黑桐干也的孤独。或许式也一样。因为这个人从来那样平凡,那样坚定,那样微笑,所以我们倾向于认为他本来如此。可是,真的有“本来如此”这样的存在吗?
豆瓣上有这样一条评论,“更值得一提的是,黑桐干也这个饱满的人,他是我一生的向往,是我毕生的寻找。他集所有美好品质与一身,拥有极为强大的内心。理解并宽容一切。 ”我也想这样说,或者这样要求,但是惊觉不能。他只是愿意平凡,并且守候平凡的一切而已。我们每个人大概都有这样的点,都曾是黑桐干也。与其要求,不如自己去做。
这样一来,这篇回忆录大概变作一个人的情书了。姑且如此。
2012年4月27日星期五
Fate/Zero第一季:世界观遭遇执行力的一系列问题
终于看完《Fate/Zero》第一季,故事的沉闷让这个过程有些漫长。作为第一次接触的Fate系列作品,Fz自有其独到之处,但并不能够完全令我满意。——尽管截止到目前,故事似乎刚刚拉开序幕。我并不忌惮以初来者的身份说出这种不满:毕竟,任何作品都不仅仅为粉丝而做。世界观固然有趣,但也仅仅是有趣而已;难以令人产生深入其中之感。或许是由于我本身对于混沌、反串与乱斗这一类别的概念并不感兴趣的缘故。当然,即使如此,以上概念依旧是Fz数个看点之中最为耀眼的一个。
从这一点来看,圣杯战争不过是一个噱头,经由圣杯战争体现出的人性才是Fz真正想要表达的内容。然而,人性这种概念,对于动漫来说,未免过于虚幻;即使对于以阴柔抑郁之风见长的TM也不例外。更为重要的是,隐藏于人性之中的明争暗斗,对于一个以叙事为消费对象的产品来说,并不具备本来必需的戏剧冲突——或者,至少这种戏剧冲突并不显式存在。这一基本问题导致了现在我们所见到的Fz的若干瑕疵,这些瑕疵包含但并不只有沉闷而缺乏高潮的叙事,还有冗长的学习曲线——观影乐趣往往在你对数目庞大的人物(圣杯战争至少需要七对主仆,还不算上其中牵扯到的几大家族中重要但并不以主仆身份出现的人物)有一定了解之后才会出现。当然,从正面来看,冗长的学习曲线可以被理解为世界观与剧情的深刻,但是动漫作为一般以娱乐功能为主的服务产业,这种深刻会令轻量级用户感到棘手。而且,反过来说,当你完全理解了这些人物,事实上,观影乐趣同样会降低——性格决定命运,在理解人物性格的过程中,以某个角度来说,你已经被不经意剧透。不过,这种以人物为重心的叙事方式的一个非常重要的优点即为续作与相关产品的易于推出;人物相较于故事更容易为受众所记忆,当故事本身被消耗完毕,人物还能够继续发挥价值。
撇开叙事不谈,七对主仆自身的特质、愿望以及相互之间衍生出来的复杂关系,足以产生相当的诱惑。但是,使这种诱惑变作现实仍旧需要相当的路程。对于圣杯战争的过度渲染使观众的期待被夸大,那种箭在弦上或者谈笑间樯橹灰飞烟灭的气氛也确实难以表现。最终,观众会发现,作为冲突升级形式的战斗并没有几场,而这不多的战斗又缺乏我们对于战斗一般认识的紧张刺激,从而再次使得观影乐趣大打折扣。
于是,这部作品的最终看点与深度体现全部集中于人物的解读分析之上。然而,就我目前所看到的,人物设计尽管不乏出彩之处,但仍旧过于平面——相对平面的人物设计并无差错,事实上,这种类型的人物设计数量众多,并且依然受到观众的喜爱。人物设计的把戏大多由性格菱形所搭建,突兀或者另类的异行能够增加人物的丰富度,但也仅仅而已。但是,对于这样一部可以说成败基于人物设计的作品来说,平面人物设计可以算得上是大忌。另外,渲染过度的错误再次出现在人物设计之中。言峰绮礼与卫宫切嗣的宿命对决被大肆讲述了若干片段,但却缺乏更深层次的论证。当然,仅就七对主仆的搭配、背景等设置来看,还是令人非常满意,平衡性拿捏恰当好处,又留有一定悬念空间。
为了配合Fz人物众多而戏剧色彩不足的特点,动画采取每集选取单独视角来展现一个相对独立的故事。不得不说,这种做法是极其明智的。若非如此,动画很可能陷入尽管努力讲述但仍旧一团浆糊的困境之中。但也有部分章节显然脱离整个叙事线索,造成了不小的遗憾。
三王对谈应该是整部动画中具有相当重量的一个片段,也是展现制作者意图的一个窗口。这一主题是否能够统领整个作品中各具野心的人物另当别论,如此隐晦地将主题藏于作品之中,而不是开章明义,固然是一种做法,但也或令观众感觉迷惑。
Fate系列的世界观的独特之处在于其与现实的融合;这种世界观尽管我本人并不喜欢,但也具有吸引人之处。但Fz的执行却存在相当问题。策划内部的本质问题应当被有意识地规避,但制作者却并未这样做,而是过于忠实地还原了原作。就我个人想象而言,Fz的小说应当非常出彩,因为它适合那样的题材。
从这一点来看,圣杯战争不过是一个噱头,经由圣杯战争体现出的人性才是Fz真正想要表达的内容。然而,人性这种概念,对于动漫来说,未免过于虚幻;即使对于以阴柔抑郁之风见长的TM也不例外。更为重要的是,隐藏于人性之中的明争暗斗,对于一个以叙事为消费对象的产品来说,并不具备本来必需的戏剧冲突——或者,至少这种戏剧冲突并不显式存在。这一基本问题导致了现在我们所见到的Fz的若干瑕疵,这些瑕疵包含但并不只有沉闷而缺乏高潮的叙事,还有冗长的学习曲线——观影乐趣往往在你对数目庞大的人物(圣杯战争至少需要七对主仆,还不算上其中牵扯到的几大家族中重要但并不以主仆身份出现的人物)有一定了解之后才会出现。当然,从正面来看,冗长的学习曲线可以被理解为世界观与剧情的深刻,但是动漫作为一般以娱乐功能为主的服务产业,这种深刻会令轻量级用户感到棘手。而且,反过来说,当你完全理解了这些人物,事实上,观影乐趣同样会降低——性格决定命运,在理解人物性格的过程中,以某个角度来说,你已经被不经意剧透。不过,这种以人物为重心的叙事方式的一个非常重要的优点即为续作与相关产品的易于推出;人物相较于故事更容易为受众所记忆,当故事本身被消耗完毕,人物还能够继续发挥价值。
撇开叙事不谈,七对主仆自身的特质、愿望以及相互之间衍生出来的复杂关系,足以产生相当的诱惑。但是,使这种诱惑变作现实仍旧需要相当的路程。对于圣杯战争的过度渲染使观众的期待被夸大,那种箭在弦上或者谈笑间樯橹灰飞烟灭的气氛也确实难以表现。最终,观众会发现,作为冲突升级形式的战斗并没有几场,而这不多的战斗又缺乏我们对于战斗一般认识的紧张刺激,从而再次使得观影乐趣大打折扣。
于是,这部作品的最终看点与深度体现全部集中于人物的解读分析之上。然而,就我目前所看到的,人物设计尽管不乏出彩之处,但仍旧过于平面——相对平面的人物设计并无差错,事实上,这种类型的人物设计数量众多,并且依然受到观众的喜爱。人物设计的把戏大多由性格菱形所搭建,突兀或者另类的异行能够增加人物的丰富度,但也仅仅而已。但是,对于这样一部可以说成败基于人物设计的作品来说,平面人物设计可以算得上是大忌。另外,渲染过度的错误再次出现在人物设计之中。言峰绮礼与卫宫切嗣的宿命对决被大肆讲述了若干片段,但却缺乏更深层次的论证。当然,仅就七对主仆的搭配、背景等设置来看,还是令人非常满意,平衡性拿捏恰当好处,又留有一定悬念空间。
为了配合Fz人物众多而戏剧色彩不足的特点,动画采取每集选取单独视角来展现一个相对独立的故事。不得不说,这种做法是极其明智的。若非如此,动画很可能陷入尽管努力讲述但仍旧一团浆糊的困境之中。但也有部分章节显然脱离整个叙事线索,造成了不小的遗憾。
三王对谈应该是整部动画中具有相当重量的一个片段,也是展现制作者意图的一个窗口。这一主题是否能够统领整个作品中各具野心的人物另当别论,如此隐晦地将主题藏于作品之中,而不是开章明义,固然是一种做法,但也或令观众感觉迷惑。
Fate系列的世界观的独特之处在于其与现实的融合;这种世界观尽管我本人并不喜欢,但也具有吸引人之处。但Fz的执行却存在相当问题。策划内部的本质问题应当被有意识地规避,但制作者却并未这样做,而是过于忠实地还原了原作。就我个人想象而言,Fz的小说应当非常出彩,因为它适合那样的题材。
2012年4月10日星期二
《晚秋》:韩式爱情,虽非王子公主,亦无差别
新片《晚秋》上映,趁着老爸生日一同观看。此前,已有朋友的推荐和剧透,让本无丝毫期待的我也动了心思。但看过之后,竟不知如何评价,勉强以标题作答。当然,从这个标题很容易看出,我并不喜爱泡菜的味道。
本片讲求意境。在朋友的讲述中并无意味的段落,待到实际看时,竟觉很美,这也是循环播放的宣传片吸引人之处。游乐园之行和雨夜的美都是经典的片段,大约也为人所津津乐道。但吸引我的——或者因我本人是佛教徒的缘故,却是安娜母亲葬礼前日,弥漫在家中的颂经声。那声音是十分贴切的。与家人的吵闹搭配,显得不免讽刺。但这恰是国人惯有的态度。
然而,一般说来,讲求意境甚好,却有两种结局。或者大妙,或者成拙。本片显然不在前列。作为安娜的成长日记,《晚秋》的拍摄显得有几分幼稚和顾影自怜,而片中对此唯一的解释则是安娜与勋的苦难人生,可惜这份苦难太过韩式,因而显得不真实,既不真实,未免有些做作,似乎所有的苦难都不过是为了这一偶然的邂逅与浪漫的爱情做铺垫,仿若天青色等烟雨。当然,上述评论的另一个解释则是我已过于衰老,因而不适宜理那份青春的感伤。写到此处,我试着回忆几年前的自己,如安娜一般缄默,心中亦有一份挥之不去的感伤,想必那时去看《晚秋》别有一番滋味。但我的意见便是,那种青春情绪就只要如此便好,何必加入更为沉重却也因此显得不协调的苦难呢?
所谓那稀薄的人情与偶遇的温暖,在片中的表现足够多了,多到让人不免思索,是否真的如此。勋对那个让安娜在意的男人说,“我何必知道,玩玩有什么不好,至少,可以让她笑,你又何时让她笑过呢?”陌生的温暖来自基本的共情,而无关日积月累的魂牵梦绕,由爱生恨,你来我往以及终于自私战胜激素。勋的确一直在玩,但不过以一种极为单纯的角度。游览车上学鸭叫,碰碰车旁的戏剧表演,结束之后的奔跑与追逐,最终送别时的角色扮演。陌生的温暖,说到底,来自于不了解。那一句句不搭调的“好”与“坏”,用另一种语言所叙述的心情与故事。这一种陌生甚至需要用购买来实现,于是有了剧中非常重要的物品手表。
故事原本可以止于此。单纯的相遇需要适时的戛然而止。勋却一直留恋,直到面对死亡和一系列突发事件,于是误把那份温暖与眷恋当做爱情,对着伊人的唇吻了下去。因此,他必须失约。无关入狱,无关追杀,仅仅从故事的角度出发。倘若不是如出,陌生的温暖被破坏,整个叙事的张力也不复存在。
细节对于缺乏明确叙事线索的影片极为重要。《晚秋》在这一点上非常重视。换衣,购买车票的反复,手表的反复出现。
说了很多关于泡菜的坏话,但在撰写本文的时候,回忆起那种陌生的温暖与年少的倔强,竟有些许感动。
2012年3月14日星期三
Android引擎e3roid学习笔记②AndEngine比较
还是利用e3roid的学习方法,再理过AndEngine;但有几点不同。首先AndEngine缺乏文档,所以方法不得已简化为源码+实例;其次,比较的目的依旧是e3roid的应用,所以从细致程度上不如前者。另外,由于AndEngineExample与e3roid不同,并不仅仅展示单一功能,而是较为复杂,其分类也就显得不那么清晰,因而遗漏问题可能较为严重,如有需要在真机到手之后会单独开文讲述。
AndEngine分为以下几个部分,即audio, engine, entity, input, opengl, ui, util。与e3roid相比,其中,engine大致与e3roid相当,entity大致与drawable相当,input大致与event相当,物理部分通过扩展包实现,同样是box2d。
但与形同虚设的e3roid相比,AndEngine显然提供了更为强大的audio支持,SoundFactory与MusicFactory令声音的控制更为自如。与此相关的官方实例有MusicExample, SoundExample等。
engine一项中也包含了比e3roid更多的内容,如camera(用以调节屏幕的显示区域,利用HUD类实际绘制游戏屏幕于手机之上),option(设置),handler(基本的碰撞检测,物理与时间等内容)以及其他特殊功能(如分屏等)。当然,也提供了如e3roid一般的fps限制以适应低端机型。与此相关的官方实例有BoundCameraExample, CollisionDetectionExample, TextrueOptionExample, DigitalOnScreenControlExample等。HUD为对于camera的继承,其下有control。此处架构有些混乱。
entity一项,除了在e3roid中我们已经见过的modifier, shape, scene, sprite等,AndEngine还增加了particle(用于粒子效应), text与primitive(基本的线、面、矩形)。与此相关的官方实例有AnimatedSpritedsExample, AutoParallaxBackgroundExample, ChangeableTextExample, EntityModifierExample, EntityModifierregularExample, LineExample, ParticleSystemSimpleExample, ParticleSystemCoolExample, ParticleSystemNexusExample, PathModifierExamle, RectangleExample, SpriteBatchExample, SpriteExample, SpriteRemoveExample, TextExample, TickerTextExample, TMXTiledMapExample, MenuExample, SubMenuExample, TextMenuExample等。需要说明的是,MenuScene为对CameraScene的继承,而后者是对Scene的继承。与engine中的camera并不相同。
input是另一个AndEngine优于e3roid之处,被分为sensor(用于重力感应)与touch(用于触屏)两项。与此相关的官方实例有MultiTouchExample, TouchDragExample。
ui将可继承的activity进行分类,用于不同的目的,如LayoutGameActivity等;除此之外,还特别增加了Dialog。
opengl下有texture等内容。
physics下相关实例有PhysicsCollisionFilteringExample, PhysicsExample, PhysicsFixedStepExample, PhysicsJumpExample, PhysicsMouseJointExample, PhysicsRemoveExample, PhysicsRevoluteJointExample等。基本上把box2d的实例搬过来了。
从以上简单粗略的梳理可以看出,e3roid基本上是一个简化版的AndEngine。在一些基础功能上,AndEngine要优于e3roid,如input与audio。但同时AndEngine也存在封装过度的问题。可以说功能与复杂并行。进一步的研究有待后续进行。
AndEngine分为以下几个部分,即audio, engine, entity, input, opengl, ui, util。与e3roid相比,其中,engine大致与e3roid相当,entity大致与drawable相当,input大致与event相当,物理部分通过扩展包实现,同样是box2d。
但与形同虚设的e3roid相比,AndEngine显然提供了更为强大的audio支持,SoundFactory与MusicFactory令声音的控制更为自如。与此相关的官方实例有MusicExample, SoundExample等。
engine一项中也包含了比e3roid更多的内容,如camera(用以调节屏幕的显示区域,利用HUD类实际绘制游戏屏幕于手机之上),option(设置),handler(基本的碰撞检测,物理与时间等内容)以及其他特殊功能(如分屏等)。当然,也提供了如e3roid一般的fps限制以适应低端机型。与此相关的官方实例有BoundCameraExample, CollisionDetectionExample, TextrueOptionExample, DigitalOnScreenControlExample等。HUD为对于camera的继承,其下有control。此处架构有些混乱。
entity一项,除了在e3roid中我们已经见过的modifier, shape, scene, sprite等,AndEngine还增加了particle(用于粒子效应), text与primitive(基本的线、面、矩形)。与此相关的官方实例有AnimatedSpritedsExample, AutoParallaxBackgroundExample, ChangeableTextExample, EntityModifierExample, EntityModifierregularExample, LineExample, ParticleSystemSimpleExample, ParticleSystemCoolExample, ParticleSystemNexusExample, PathModifierExamle, RectangleExample, SpriteBatchExample, SpriteExample, SpriteRemoveExample, TextExample, TickerTextExample, TMXTiledMapExample, MenuExample, SubMenuExample, TextMenuExample等。需要说明的是,MenuScene为对CameraScene的继承,而后者是对Scene的继承。与engine中的camera并不相同。
input是另一个AndEngine优于e3roid之处,被分为sensor(用于重力感应)与touch(用于触屏)两项。与此相关的官方实例有MultiTouchExample, TouchDragExample。
ui将可继承的activity进行分类,用于不同的目的,如LayoutGameActivity等;除此之外,还特别增加了Dialog。
opengl下有texture等内容。
physics下相关实例有PhysicsCollisionFilteringExample, PhysicsExample, PhysicsFixedStepExample, PhysicsJumpExample, PhysicsMouseJointExample, PhysicsRemoveExample, PhysicsRevoluteJointExample等。基本上把box2d的实例搬过来了。
从以上简单粗略的梳理可以看出,e3roid基本上是一个简化版的AndEngine。在一些基础功能上,AndEngine要优于e3roid,如input与audio。但同时AndEngine也存在封装过度的问题。可以说功能与复杂并行。进一步的研究有待后续进行。
2012年3月13日星期二
Android引擎e3roid学习笔记①引擎架构
e3roid是一款为android平台提供的开源2d游戏引擎,其主页为http://www.e3roid.com/,在其主页业已包括的信息本文将不再赘述。关于android平台游戏引擎的不给力与各种介绍,cping1982前辈在其主页中已多有说明(http://blog.csdn.net/cping1982)。与相似引擎AndEngine相比,e3roid架构合理,并且有API说明(http://www.e3roid.com/doc/),免去仅凭阅读实例猜测用法的苦恼;反过来说,AndEnigne的实例也可作为e3roid的补充,盖其本身实例较前者匮乏,而作者本人也承认e3roid对于AndEngine的继承关系。本文仅就e3roid引擎资料缺乏的情况之下,提供个人的学习研究心得,更为重要的目的在于为应用作一些铺垫。研究方法十分朴素,即以源码+文档+实例,希望能够有所收获。当然,错误也在所难免,敬请谅解。
本文所用e3roid为1.2.11版本。
e3roid由以下package构成,即[e3roid][audio][drawable][event][lifecircle][opengl][physics][script][util][service][transport],其中,[script]用于多种语言实现(目前支持Java, Javascript, Lua),[util]提供通用类,[service]与[transport]用于网络通信,亦即在通常情况下开发者只需专注于其他内容,而这一部分的内容由package的名称即很容易理解其内容。
下面将分述各包的内容与用法。
e3roid的基础类E3Activity, E3Engine, E3Scene出现于[e3roid]之中。作为一款面向android平台的游戏引擎,Activity类为必备要素。使用一个实例来描述基础类的运用十分必要。一个标准的e3roid应用,至少应对E3Activity进行如下继承。本例来自于HUDExample,除了本例之外,SceneUpdateExample也是E3Scene的重要实例。在大致像样的应用之中,依次调用onLoadEngine()->onLoadScene()->onLoadResource()之后,必须有一个Update()函数用以刷新。
[audio]包由AudioInputListener接口与AudioInputeService类组成。前者用于接收声音输入,后者用于提供声音输入录制服务;除了标准的lifecircle之外,AudioInputService提供了诸如run(), isRecording(), readAs16bitWave()等简单实用的函数。官方给出的example为AudioInputExample。初步鉴定e3droid中并未提供如AndEngine中的SoundFactory类,这多少为游戏声音编程带来一些麻烦,但依靠android自身提供的功能大可完成一般性质的任务。其实AndEngine之中也不过进一步封装而已。具体方法详见Beginning Android Game 2011一书。
值得注意的是,当进行Shape(Background, Sprite)的清除工作时,需要重载父函数的onRemove(), onDispose()等方法,并且,被清除的对象不可再被调用,若只是想要隐藏,使用SetVisible()即可。
[drawable]其下还有[controls][modifier][texture][sprite][tmx]等子包,展示了其高级用法,下面就来进一步学习。
[controls]主要提供虚拟摇杆的支持,其下有StickController与DigitalController两个类,其中后者为对前者的继承。官方文档说明前者为analog on-screen control,而后者为digital on-screen control,但二者的区别我尚未明晰。官方实例提供DigitalControllerExample, AnalogControllerExamplem, MultiTouchControllerExample,为一个基本完整的模拟摇杆实例。目前感觉此包是专门的模拟控制,如需特别控制则以应用onSceneTouchEvent(), onTouchEvent()为佳。
[modifier]提供修改可绘制对象的接口,其中大多数类都可从名称中获取其含义。ShapeModifier是其抽象基类,其下派生出ParallelModifier, ProgressAware, ProgressModifier, SequenceModifier, SpanModifier,其中,ProgressAware, ProgressModifier用于控制进程,SequenceModifier提供设置循环方法,其他待考证。ProgressAware下派生出AlphaModifier, AxisModifier, ColorModifier, MoveModifier, RotateModifier, ScaleModifier等更为实用的具体类。官方提供的实例有AlphaModifierExample, AxisModifierExample, ColorModifierExample, MoveModifierExample, RotateAndScaleModifierExample。由以上实例可以看出,任何Modifier类均需要以ProgressModifier进行初始化,并且调用onModifierStart(), onModifierFinished()方法。进一步的研究将在真机到手之后跟进。
值得注意的是在[modifier]之下尚有被作者称为for easing actions的[function]包,其具体作用目前尚不清楚。
[sprite]提供sprite的特殊绘制方法,包括AnimatedSprite, TerminalSprite, TiledSprite, TextSprite,其意自明。官方提供的实例有AnimatedSpriteExample, TiledBackgroundExample, TiledSpriteExample。在具体实现上,则可在上面的例子中加入如下代码。AnimatedSprite.Frame是[sprite]下的一个数组,用以存放动画的帧。
以上基本理过e3roid的架构与实例。
本文所用e3roid为1.2.11版本。
e3roid由以下package构成,即[e3roid][audio][drawable][event][lifecircle][opengl][physics][script][util][service][transport],其中,[script]用于多种语言实现(目前支持Java, Javascript, Lua),[util]提供通用类,[service]与[transport]用于网络通信,亦即在通常情况下开发者只需专注于其他内容,而这一部分的内容由package的名称即很容易理解其内容。
下面将分述各包的内容与用法。
- [e3roid] 基础类
e3roid的基础类E3Activity, E3Engine, E3Scene出现于[e3roid]之中。作为一款面向android平台的游戏引擎,Activity类为必备要素。使用一个实例来描述基础类的运用十分必要。一个标准的e3roid应用,至少应对E3Activity进行如下继承。本例来自于HUDExample,除了本例之外,SceneUpdateExample也是E3Scene的重要实例。在大致像样的应用之中,依次调用onLoadEngine()->onLoadScene()->onLoadResource()之后,必须有一个Update()函数用以刷新。
1 public class TestExample extends E3Activity{ 2 // The width and height for the scene. 3 private final static int WIDTH = 320; 4 private final static int HEIGHT = 480; 5 // Textures. 6 private Texture robotTexture; 7 private Texture hudTexture; 8 9 10 @override 11 public E3Engine onLoadEngine(){ 12 // Initiating the engine. 13 E3Engine engine = new E3Engine(this, WIDTH, HEIGHT); 14 // Asking for the full screen request. 15 engine.requestFullScreen(); 16 // Asking for the portrait request. 17 engine.requestPortrait(); 18 return engine; 19 } 20 21 @override 22 public E3Scene onLoadScene(){ 23 // Initiating the scene. 24 E3Scene scene = new E3Scene(); 25 // Load the texture for hud. 26 Sprite hud = new Sprite(hudTexture, centerX, centerY); 27 scene.addHUD(hud); 28 // Set the position. 29 centerX = (getWidth() - robotTexture.getWidth()) / 2; 30 centerY = (getHeight() - robotTexture.getHeight()) / 2; 31 // Load the texture for backgroud. 32 Background background = new Background( 33 new TiledTexture("background.png", getWidth(), getHeight(), this)); 34 scene.getTopLayer().setBackground(background); 35 // Load the texture for robot. 36 Sprite robot = new Sprite(robotTexture, centerX, centerY); 37 scene.getTopLayer().add(robot); 38 return scene; 39 } 40 41 @verride 42 public void onLoadResources(){ 43 robotTexture = new AssetTexture("robot.png", this); 44 hudTexture = new AssetTexture("controller_base.png", this); 45 } 46 47 }
- [audio]
[audio]包由AudioInputListener接口与AudioInputeService类组成。前者用于接收声音输入,后者用于提供声音输入录制服务;除了标准的lifecircle之外,AudioInputService提供了诸如run(), isRecording(), readAs16bitWave()等简单实用的函数。官方给出的example为AudioInputExample。初步鉴定e3droid中并未提供如AndEngine中的SoundFactory类,这多少为游戏声音编程带来一些麻烦,但依靠android自身提供的功能大可完成一般性质的任务。其实AndEngine之中也不过进一步封装而已。具体方法详见Beginning Android Game 2011一书。
- [drawable]
值得注意的是,当进行Shape(Background, Sprite)的清除工作时,需要重载父函数的onRemove(), onDispose()等方法,并且,被清除的对象不可再被调用,若只是想要隐藏,使用SetVisible()即可。
[drawable]其下还有[controls][modifier][texture][sprite][tmx]等子包,展示了其高级用法,下面就来进一步学习。
[controls]主要提供虚拟摇杆的支持,其下有StickController与DigitalController两个类,其中后者为对前者的继承。官方文档说明前者为analog on-screen control,而后者为digital on-screen control,但二者的区别我尚未明晰。官方实例提供DigitalControllerExample, AnalogControllerExamplem, MultiTouchControllerExample,为一个基本完整的模拟摇杆实例。目前感觉此包是专门的模拟控制,如需特别控制则以应用onSceneTouchEvent(), onTouchEvent()为佳。
[modifier]提供修改可绘制对象的接口,其中大多数类都可从名称中获取其含义。ShapeModifier是其抽象基类,其下派生出ParallelModifier, ProgressAware, ProgressModifier, SequenceModifier, SpanModifier,其中,ProgressAware, ProgressModifier用于控制进程,SequenceModifier提供设置循环方法,其他待考证。ProgressAware下派生出AlphaModifier, AxisModifier, ColorModifier, MoveModifier, RotateModifier, ScaleModifier等更为实用的具体类。官方提供的实例有AlphaModifierExample, AxisModifierExample, ColorModifierExample, MoveModifierExample, RotateAndScaleModifierExample。由以上实例可以看出,任何Modifier类均需要以ProgressModifier进行初始化,并且调用onModifierStart(), onModifierFinished()方法。进一步的研究将在真机到手之后跟进。
值得注意的是在[modifier]之下尚有被作者称为for easing actions的[function]包,其具体作用目前尚不清楚。
[sprite]提供sprite的特殊绘制方法,包括AnimatedSprite, TerminalSprite, TiledSprite, TextSprite,其意自明。官方提供的实例有AnimatedSpriteExample, TiledBackgroundExample, TiledSpriteExample。在具体实现上,则可在上面的例子中加入如下代码。AnimatedSprite.Frame是[sprite]下的一个数组,用以存放动画的帧。
1 // Add animation frames from tile. 2 ArrayList<AnimatedSprite.Frame> frames = new ArrayList<AnimatedSprite.Frame>(); 3 frames.add(new AnimatedSprite.Frame(0, 0)); 4 frames.add(new AnimatedSprite.Frame(1, 0)); 5 frames.add(new AnimatedSprite.Frame(2, 0)); 6 frames.add(new AnimatedSprite.Frame(3, 0)); 7 8 // Start animation with 500msec, infinite loop. 9 sprite = new AnimatedSprite(texture, centerX, centerY); 10 sprite.animate(500, frames);
需要停止播放动画则可加入
1 if (sprite.isAnimated()) sprite.stop();非常方便。
TiledSprite目前不在本文关注范围之内。
- [event]
- [lifecircle]
- [opengl]
- [physics]
以上基本理过e3roid的架构与实例。
2011年9月14日星期三
游戏设计书籍评述
由于学习的需要,研读了部分市面上现存的游戏设计书籍。很早就想将其整理出来做一下备份。刚刚在豆瓣上搜索书籍时,发现此类书目有多了不少,翻译引进与国人自主撰写均有,质量究竟如何不得而知。但我的看法是尽管大多数内容未免重复,但是每一本书都有其独到之处。翻阅不需很长时间,略有收获便值得庆幸。如有机会,还是想将新出的书一一学习过。
此篇文章中所列书籍均为设计类,不涉及任何具体技术问题。排序不分先后。
这是偶然在卓越搜索得到的书,但后来却证明是最为实用的书。实用,是对设计师而言。尤其对初心者。书中的一切均可实践,涉及的问题都是在设计过程中一定会遇到的问题。至少在我的阅读范围内,尚未见到过如此面向实用的书籍。若类比,本书可与编剧领域的《21天搞定电影剧本》相媲美。其他书籍或许同样实用,但前提是对于公司或工作室。本书却完全适用于个人创作或小型工作室。用作者的话说,他试图发现游戏领域的元素周期表。在设计书籍普遍语焉不详的现在,实为难得。总之,极力推荐。
作者为著有Game Design Bible的Christ Crawford,价值不容小觑。但本书与Bible不同,价值不在一般理论的介绍与阐释,而在于Crawford独家珍藏的各种游戏想法与点子,还有他制作的现在已经很难找到的游戏开发过程。阅读本书是一次真正的与大师对话。Crawford是一位特立独行的设计师,也是把游戏推向艺术高度的设计师之一。他的很多想法即使在今天看来仍不过时,读之很容易心有戚戚焉。另外,Crawford物理背景出身,编程能力极强,值得学习。本书中他讲述了不少Atari时代的故事,可以重新体味彼时的辉煌与教训。
本书是为数不多的类型游戏设计书籍。关注角色扮演游戏的设计师一定要读一下。很多一直在思索的问题都可以在其中找到答案。附录部分收录了rpg大作如辐射的策划文档,非常具有收藏价值。
本书极具学术气息,由黄石老师等的博士论文修改集结而成,与市面上大多数由游戏制作者撰写的书籍非常不同。不久前导师曾说,没有理论支撑,一个学科不可能站住脚。诚如斯言。所以在我看来,《数字游戏策划》一书意义重大。也希望今后能够出现更多此类书籍。
对增加游戏剧情和情感深度非常有帮助的一本书,而且非常实用。作者为好莱坞金牌编剧,但难得的是参与过数款游戏剧情工作,懂得游戏是怎么回事。通常的方法之外,他甚至提供了非线性叙事的一种方法。虽然在我看来不太实用。
如书名揭示的那样,这是一本关于游戏的基本介绍。初读可能会觉得很不起眼,但如果细读的话则能够发现许多老师独到的关注点。细读到什么程度呢?很多章节的来源我已了然在心。如果打算报考中国传媒大学游戏专业研究生的话,最好读一下。
与题目不同,这本书并不仅仅谈论产业。事实上,它基本没有提到产业。相反,这是一本介绍游戏制作全过程的设计全书。也可以说,是一本游戏设计的入门书籍。总体而言,本书适宜大型公司的游戏制作使用。内容非常全面,从预制作过程到原型设计,乃至预算都有涉及。有配套网站和相应的练习题,题目主要作用为检测读书效果,但也有一些面向实践的题目,能够达到锻炼思维的目的。
这本书的出版时间应该非常早,因为我是在中学时候就收藏了本书。应该说,《顶级游戏设计》一书还是需要一定基础与反复阅读才能够体会。本书同样涵盖了游戏制作的基本过程,但个中所述几乎完全来自实践,倘若有一定实践经历则能得益许多。每章附有制作人采访与作者个人建议,非常中肯实用。附录中则有推荐网站、工具与教育资源。总之全书相当具有收藏价值。
非常经典的关卡设计教材。由于同类书籍的缺乏而愈发显得弥足珍贵。理论介绍之后附有虚幻编辑器的使用方法。总之必读的一本书。
来自美国的游戏设计教程,由于是全彩印刷因而非常之贵。但读完之后却感觉相应收获并不如价钱那么引人注意。入门类书籍,涵盖内容全面,但独到之处较少。
本人最早阅读的一本游戏设计通论,由于当时读的是英文版,所以也不清楚这一版本翻译如何。内容还是非常详尽,对于入门帮助很大。同样附有制作人采访,内容也十分厚道和精彩。
2011年9月13日星期二
Tales of Grace:传说初恋
Tales of Grace(圣恩传说,下文中简称TOG)是我接触到的第一款传说。可以认为,我并不是传说的目标受众。起初,日式漫画人设的3D化便使我难以接受。剧情过于低龄,让人提不起继续的兴致。战斗或许有趣——事实上,我也是由于战斗才被吸引尝试传说系列——但缺乏持久的游戏动力。以上是我对传说系列的初步认识。我的游戏经历并不丰富,对于日式rpg的大类也认识有限。在真正接触过TOG之后,传说系列在我眼中的形象大为改观,现在正不时抱着小三儿攻克Tales of Innocence。
在褒扬TOG之前,我仍然要先说明它显而易见的缺陷。虽然这种缺陷几乎是rpg或说日式rpg的通病。迷宫无聊而冗长,其中的谜题可看做对玩家智力的鄙视。或许是由于制作者将大部分的精力投入战斗系统而导致。至于人设与剧情,这是仁者见仁的问题,不难看出,本作面向青少年,那么如此做法不仅不能算作过错,反而是吸引玩家的手段了。
TOG解决的最大问题即是传统rpg战斗重复,并因此导致的无趣问题。解决这一问题的主要手段是战斗系统动作化。但并非简单的动作化,而是某种程度的格斗化。采用线性系统,既增加了跑位带来的变化,又去除了无关因素。动作化带来的显而易见的好处是战斗的变化,而试图掌握这种变化的玩家则需要练习,这种练习与练级非常好地重叠在一起,带来了传统rpg所不能提供的游戏体验。
除此之外,TOG还采用了很多辅助方法来改进战斗游戏体验。譬如特定条件下的各种奖励。这其实带有成就系统的概念。利用称号学习技能及附加值也是充满乐趣的。虽然与直接通过经验获取相比有一些随机性,而当称号条件苛刻的情况下尤为如此。
但是,相比其他的作品,如正在进行的TOI,家用机平台的TOG却并不够丰富。尽管有系列一贯性的料理系统,但优秀的战斗系统却缺乏更给力的任务让玩家体验。
我并不想对游戏剧情的具体内容作评价,虽说我很叹服传说的人物塑造,其丰富的细节令对我来说狗血的剧情都可以忍受。但是小对话系统的出现表明制作者有意于尝试“玩”剧情的概念。小对话本身作为收集元素体现的正是这一点。虽然这还远远不够,但我对这一趋势很是欣喜。
在褒扬TOG之前,我仍然要先说明它显而易见的缺陷。虽然这种缺陷几乎是rpg或说日式rpg的通病。迷宫无聊而冗长,其中的谜题可看做对玩家智力的鄙视。或许是由于制作者将大部分的精力投入战斗系统而导致。至于人设与剧情,这是仁者见仁的问题,不难看出,本作面向青少年,那么如此做法不仅不能算作过错,反而是吸引玩家的手段了。
TOG解决的最大问题即是传统rpg战斗重复,并因此导致的无趣问题。解决这一问题的主要手段是战斗系统动作化。但并非简单的动作化,而是某种程度的格斗化。采用线性系统,既增加了跑位带来的变化,又去除了无关因素。动作化带来的显而易见的好处是战斗的变化,而试图掌握这种变化的玩家则需要练习,这种练习与练级非常好地重叠在一起,带来了传统rpg所不能提供的游戏体验。
除此之外,TOG还采用了很多辅助方法来改进战斗游戏体验。譬如特定条件下的各种奖励。这其实带有成就系统的概念。利用称号学习技能及附加值也是充满乐趣的。虽然与直接通过经验获取相比有一些随机性,而当称号条件苛刻的情况下尤为如此。
但是,相比其他的作品,如正在进行的TOI,家用机平台的TOG却并不够丰富。尽管有系列一贯性的料理系统,但优秀的战斗系统却缺乏更给力的任务让玩家体验。
我并不想对游戏剧情的具体内容作评价,虽说我很叹服传说的人物塑造,其丰富的细节令对我来说狗血的剧情都可以忍受。但是小对话系统的出现表明制作者有意于尝试“玩”剧情的概念。小对话本身作为收集元素体现的正是这一点。虽然这还远远不够,但我对这一趋势很是欣喜。
订阅:
博文 (Atom)