铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 2298|回复: 0

[通用] 发点备忘吧,以后应该还会更新

[复制链接]
发表于 2013-5-12 00:47 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
本帖最后由 weyl 于 2013-5-12 00:59 编辑

这游戏应该没啥好研究的了。

以下部分包含之前引擎不太准确的部分。但是更新之后,有可能造成新问题的出现。

1. 人物行走
人物在静止时,步数为0,之后的步数是从1~7之间变化,在下次静止时不再经过0。也就是说,双腿并拢的贴图在行走时不应出现。在猪3原来的版本中,初始步数设为了1,这是不正确的。

2. 贴图闪烁
贴图闪烁在dos版中通过更换调色板完成。原版的十四天书的图片也包含闪烁像素,这样来看,dos版的这些图片应该是在物品栏中可以闪烁的,但是实际上好像没有。

3. 场景画图的顺序
反汇编的结果是首先画无高度地面,其余元素从左向右一排排画出,但是这种画法是不准确的。从原版的图片资源来看,没有方法可以通用于全部类型的图片资源。在lua版中是以坐标的x+y为大循环,x为小循环的顺序画出的。但是该顺序显然与原本的图片的特点相关,例如拔金蛇剑的动画,由于其宽度实际上是占用了两个坐标位,如果换个方向的话,与旁边宝箱的遮挡顺序就会有明显的错误。目前猪3的画图顺序是不准确的。

4. 在场景内鼠标寻路的问题
鼠标寻路时,如果发现路径的顺序被外来因素改变,例如转变场景,或者事件中改写了主角的坐标(一朵蓝花事件),则应当立刻停止主角的行动。否则会造成剧情的不正常进行。

5. SDL_Mixer
应该是存在内存泄露的错误导致游戏的无规律跳出。在某些系统上很频繁。已更换。

6. SDL表面
在载入时应转为与主屏幕相同的格式,可以达到较快的贴图速度。在程序退出时,一般的建议是手动释放全部。

7. 内场景的绘图
内场景如果采用实时绘图,效率远不如外场景,原因不明。为了表达场景内的动态效果,目前的方案是采用3重缓冲,即屏幕,当前场景的映像,当前场景的第二映像。其中第二映像在副线程中一直在刷新,否则会导致游戏主线程较卡。在第二映像每次绘制完成后,才会更新至第一映像,而屏幕每次都从第一映像读取。为了将带遮挡的主角画到屏幕上,使用了遮挡值来处理,遮挡值即实际上的画图顺序。但是需要注意,在副线程中对可变长度的变量操作,无论读写,均有可能造成程序的崩溃,原因不明。在设计数据结构时应避免。

8. 主地图的绘图顺序
采取根据宽度来计算贴图物件底座的实际中点的方法。注意有一幅山的贴图(原版渤泥岛)因其偏移值不合理,故可能还需要考虑偏移值偏离贴图实际高度的部分。

9. SDL的刷新屏幕
SDL_UpdateRect函数,在darwin(即macos和ios)系统中,无论范围如何指定,均刷新全部屏幕范围。针对于此,可以手动进行双缓冲。

10. 纹理
纹理不能互相画到对方上面。

11. AI
攻击AI为计算全部可能走到的位置和攻击点的情况。为了简化代码,以及保持与实际的设置能够一致,应利用设置动画位置来设置攻击点,因此设置动画位置应采用效率较高的算法,但是在面攻击的时候需要特殊处理,因为对面攻击而言,并没有好的快速设置方法,但可以判断目标与攻击点间的距离。同时,对于已经计算过的攻击点,应不再重复计算,但是因为伤害计算与距离相关,故该方法可能不准确。

12. 载入贴图以及副线程
在启动时,仅载入部分贴图可以加快启动速度,但可能会导致游戏中较卡。同时,也有可能导致在副线程操作变体?因此需特别注意。如果限制副线程进行载入操作,那么在转换场景时,有可能会出现副线程先画完,这样场景内某些贴图会延迟出现。因此在转换场景,事件中重新绘制场景等操作时,应设法停止副线程的操作。在多线程程序中,出现任何意外都有可能!

13. 场景贴图的变化
因为采用场景映像的处理,因此应当在事件改编场景贴图之后,首先确认是否修改的是当前事件的贴图,并依据情况进行场景映像的刷新。为了提高效率,可以仅更新可见部分,但是需注意的是可见部分并不一定是以主角为中心。如果未载入全部贴图,那么事件内可能也需要载入操作。
一般来说,如果每次修改贴图时均立刻刷新场景,速度会较慢,故应在事件内记录是否需要刷新,在事件结束时统一刷新。
注意,原版的判定似乎很混乱。

14. 战场映像
战场映像分为两层,即地面和建筑。原因是建筑层常常比较复杂,实时重绘效率很低。而在绘制带光标战场时,可以设置建筑层半透明显示,以方便查看可选位置。

15. 出招动画与效果动画
二者并非连续进行,而是应有数帧重合。未处理。

16. 绘制矩形框
应采用对Surface进行一定处理,并贴到主屏上,但是可能造成一些意外。

17. 医疗和用毒的效果
应设置在战场和平常用同一个函数。在显示的时候不同。

18. 字串
sdl_ttf只能用unicode字串,在windows下面可使用API,其他平台下应考虑libconv。简繁体并非一一对应,故不建议。fpc中,更需注意默认的字串为utf8,汉字为3字节。某些字体中的字符可能会有很奇怪的偏移,可以利用前面加一个空格对齐。

19. RRole等的下标可以从-1开始!

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-5-3 20:13

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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