3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 2515|回复: 15
打印 上一主题 下一主题

[讨论] 用阴谋论解释355

[复制链接]

2159

主题

3万

帖子

3万

积分

游戏天王

纱织巴吉纳

Rank: 11Rank: 11Rank: 11Rank: 11

贡献度
5550
金元
97781
积分
37978
精华
0
注册时间
2008-2-17

金不换骨灰玩家~游戏天王~

跳转到指定楼层
主题
发表于 2008-11-4 10:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
事先声明:本文并非严格意义的论文,因为缺乏证据,所以用了阴谋论的角度写。欢迎各位提出反对意见,让大家进行讨论,但希望最起码能描述论证过程。那些我不同意,所以你就是无理的论调无聊之极,希望不要出现。当然,也欢迎灌水。

    阴谋,必先有动机,以此动机作为准则展开。假设你是koei,你会如何开发355呢?你面对的最大问题就是创新。前面一堆真三国无双,人物故事的创新是很有限的,不能脱离故事的核心,更不能凭空创造一些人物(因为凭空创造一个人物的代价很大,要从市场学角度分析可行性,之后就是投入大量的资源对这个人物从背景到外型进行设计)。那么创新的对象就变成了游戏系统。

回顾355的宣传片,抛开美术和剧情上的东西,就可以看到这几点(至少):
1、尸体不消失;
2、场景;
3、连舞系统。
    这就是动机,游戏的设计就要符合这个动机进行。换句话说,动机就是最大利益所在,一切利益也要归顺于最大利益。
而这就导致了本腐最不满意的地方出现,起码这几个:
1、心灵传动小兵,还有突然出现又突然消失的景物;
2、三步以外的贴图崩坏;
3、连舞系统;
4、敌兵的绝对防御。
    总的来说,355就是为了大视觉而牺牲了小视觉。

    为了抛开一些麻烦,这里先设定一个前提:假定游戏的所有图形处理都在GPU中进行。
    用面向对象编程的语言来描述,游戏中的每一个兵(包括自己),可以归为一个人类(不清楚概念的,可以查查面向对象编程中的定义)的实例。
    这个人类的属性包括:动作、体力、位置、状态(站立,倒下,攻击,防御)等等。
    而玩家角色的属性在实例化的时候有所扩展,添加了连舞值、无双值、特技值等。
    值得注意的有两点:一、动态阴影也算是一个人类的实例,只是它的数值跟随着主人的变化而已,简单的理解就是实际上玩家在一控二。它的扩展属性则包括光源(判断阴影方向)等等。二、尸体,实际上还是一个实例。
   
    记住这句话:实例存在就一定要占用内存空间。

游戏进行的时候,在内存中出现的情形是这样的:
    内存空间是由一个个格子在长宽高方向连续排列而形成的空间,空间中每个格子都有自身的不重复的编号。
    那么,不妨把战场想象成一个1000 X 1000 X 1000的空间,而在战场中的人物则是一个10 X 10 X 10的立方体。和355不同,354的景深开尽了也不是全场,这样做可以保证内存空间的低使用率,减轻cpu运算,从而获取流畅的速度。
    显然,战场中能容纳的人数十分有限。为了防止溢出,程序不会容许同时存在“人类”的实例数超过一定数量。所以尸体不可能永远不消失,因为它始终占用了一个实例大小的空间。于是就出现了“走一段距离,然后回头尸体不见了”的现象。
    还有另外一个更重要的原因就是cpu的运算。人物有运动,就必然存在运算。同屏人数多,运算量大,大量运算同时进行,就会出现等候,甚至死锁。这就是卡的本质。

完全服务于动机,Koei定出了牺牲式的解决方案是:
    一、心灵传动的人和物。隐形士兵就是一个未实例化的“人类”,它占用了一个相对较小的空间。这是一种预生成,这个“人类”被指明要生成一个小兵,当且仅当内存空间能够分配出一个新的实例空间。形象一点说,就好像轮回一样,尸体消失了,或者士兵走出了一定范围,就会有新的士兵出现。这样就保证了同屏人数,但显然这个预生成做得不太好。相信大家也见过忽然出现的小兵和自己行动的诡异帅旗了吧。

    二、三步以外的阴影消失和贴图崩坏。阴影消失同上理可以解释。而贴图崩坏则是为了防止gpu运算量。

    三、敌兵的绝对防御。回到前面描述的内存空间,当人物攻击时,在那10 X 10 X 10的立方体X相邻的位置取一个1 X 1 X 1的方格k,附上攻击状态。当另外一个10 X 10 X 10的立方体Y靠近,就会通过编号判断Y内的方格是否与之邻接,是则攻击成功,否则失败。由于一个攻击动作存在多个瞬间,所以这种判断要进行很多次。这是最简单的攻击判定。加入防御事件之后,当一个角色防御,则将他防御面的100个方格设为防御状态,判断与k邻接的Y内的方格是否防御,是则攻击失败,否则成功。而绝对防御则免却这个设定的麻烦,只要把Y的属性设定为防御,判断时候只需要将kY的防御属性作比较就行。所以koei就是用绝对防御来减轻内存和cpu的压力,让它们全心全意服务于场景和人数。
然而这个解决方案却不能解决问题。或者说只是杯水车薪。


卡的原因,除了兵多,还有连舞系统。
    简单的出招设计可以这样:设置一个temp记录已实现的动作数。每按一下攻击键,判断temp值,从而判断下一个动作。这种方法通常会使用函数的递归实现,从而使得时间复杂度大增。
    假如是堆栈,则只需要可以通过判断盏顶元素(现在的动作)来判断下一个动作。一定的时间片内,每按一下攻击键的运算流程如下:判断盏顶动作,确定下一个动作,实现动作,将此动作就会被放入堆栈。当按下攻击键盘超出了这个时间片,则会清空堆栈,所以再按的话动作就重新开始。这个相信355354都是一样的。然而355却增加了一个连舞系统,也就是每次动作检验都要检验连舞值,if语句包含了两个元素,使得时间复杂度增大了,从而增大了cpu的压力。

    然而,koei为了维护前面所说的动机,使得355的问题和解决方案出现失衡,并且牺牲了不该牺牲的东西,创新的东西又不完善,最后就导致问题解决不了又出现新问题。

写着写着无心机无耐心写了,所以思维和文笔有点混乱,大家就见谅凑合着看吧~[em25]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-3-19 10:24 , Processed in 0.027822 second(s), 16 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表