|
发表于 2007-8-29 12:04:00
|
显示全部楼层
Re:单机游戏中隐藏的事物网络化
就这个问题,我咨询了我以前的同事,他目前在国内知名游戏开发公司就任制作人,程序出身:
地球联合防卫军 说:
1定义副本BOSS有死亡后变身的设计;
2死亡后变身,是有条件触发的;
3条件是,只要过程中累计在60秒内,伤害达到10000,该BOSS死亡时候,将会触发复活变身;
请问是否能够实现这个设计?如果能实现,代码应该怎么写?
这个设计难度有多大?
这个设计会不会造成数据封包上的麻烦?
我想的是,每一次攻击成功,就开一个计数器,计算由这次进攻开始,到伤害10000花费的时间,因为我想到,如果我从第一次进攻,到第十次进攻,花费60秒,只造成5000伤害,但是谁也不能保证我从第8次开始算起的话,到第18次结束,正好60秒内完成伤害10000的条件,计算是有交集的,所以我想应该是每次伤害都新开个计数器;
一边计算,一边释放数据......这样思考对不对?或者有没有简便省事的设计?
地球联合防卫军 说:
因为我用这个想法,所以我觉得这个设计在OL游戏中不可行,会造成数据封包太大,增加服务器负担.
--------------------------------------------
有人给出了这样一段代码:
npctimer ;//计时x秒 x秒后timer消失
npctimer(60);
npctimer(120);//开两个npctimer
npchpchecker(x,y,z,n);//每次npchp变化判断npc血量,如果小于x,或者大于y,或者大于z%,或者小于n%,返回真
npcskillchecker(x,y,z,n);//判断x,y,z,n如果为真,触发
这样真的可以吗?
Hunter 珍惜 说:
==
Hunter 珍惜 说:
我认为不用计数器,需要记录每次伤害的发生时间,和伤害数字,每次伤害发生以后,已这次为起点,计算出总哪次伤害到现在的伤害累计达到 10000 再计算时间跨度是否是60秒内。
地球联合防卫军 说:
那这样的结果,其实还是分出N个进程去测算,而计算进程的N=攻击次数,不是吗?
Hunter 珍惜 说:
进程只有一个,进程的计算次数为 N = 攻击次数
Hunter 珍惜 说:
前一种方案 的checker也要执行多次
地球联合防卫军 说:
那对方给出的代码,能够达到准确的判断吗!?
能够正确,准确触发变身的结果吗!?
Hunter 珍惜 说:
不能
Hunter 珍惜 说:
因为不能只计算60秒以内的数据
地球联合防卫军 说:
也就是说,我的设计方向是正确的?那么按照我的设计方向,是不是会造成大量的CHECKER,导致数据封包过大,在OL游戏上不能实现?
Hunter 珍惜 说:
数据封包不会有变化 会增加checker
地球联合防卫军 说:
直接点说,游戏表现上,会不会LAG?
Hunter 珍惜 说:
会增加服务器计算量,不会改变网络负担。
地球联合防卫军 说:
就是说,玩家感受上不会有影响!?
Hunter 珍惜 说:
可每一个游戏功能都会增加服务器计算量
这可不好说
无意义的累加服务器负担总不是好事情
地球联合防卫军 说:
明白了...谢谢
----------我是分割线-------------
我又就这个问题请教了公司的程序员:
回答如下:
不用每次开个计时器吧,直接开个60秒的空间,存储最近60秒的攻击状态就可以了。
起先这个空间是从空到填充的状态,例如填充了abcde ,满了以后,就象队列那样,新加一个就抛掉一个最远的。新加一个f的时候要抛掉一个a,以此类推。
[我再次把这个想法和老同事询问,回答如下]
Hunter 珍惜 说:
是这样, 记录攻击的空间可以和其他也需要的游戏功能共用。
地球联合防卫军 说:
这样的话,是不是还是一样的结果,CHECKER数量庞大?
地球联合防卫军 说:
对服务器造成负担?
Hunter 珍惜 说:
是的
---为了保证观点公正,我又请教以前公司另外一个程序主管,他目前在台湾某开发公司任职制作人---
小??@Taipei : UriSland New Challenge !!!.....Always remember the anniversary of the day first time we together. 说:
你的60秒? 累?...... 等於是??r算60秒耶.....
小??@Taipei : UriSland New Challenge !!!.....Always remember the anniversary of the day first time we together. 说:
那只有在client端?算 才是最?合的...但是 怕外?炱平?.......
小??@Taipei : UriSland New Challenge !!!.....Always remember the anniversary of the day first time we together. 说:
恩~~ 否?t增加服?掌饔?算及封包?z查 不太?合
小??@Taipei : UriSland New Challenge !!!.....Always remember the anniversary of the day first time we together. 说:
不?真要做的? 也有可能 就是技?上??щy一?........... 而且效率不知道 要?y?
[我最后的结论:]
这个设计,其实不论使用任何方式去计算,CHECKER的次数=攻击次数,而且因为游戏中的不同状况,连击,DOT等等各种方式都有,这个次数也许会很多很多......
因为任何功能都会给服务器造成负担,但是我们需要平衡产生负担的代价是否值得.
谢谢辐射君给我提供了个新的思考方向.程序方面我确实不是什么高手.
对于某人的评论...你还是放出点真正有营养的东西来吧,不要贻笑大方. |
|