铁血丹心

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

[C++复刻] kys-cpp的设计简介

[复制链接]
发表于 2018-7-23 15:54 | 显示全部楼层 |阅读模式

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

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

x
摘要
本文主要介绍kys-cpp框架中的一些设计方案,以及为何采取这样的设计。同时分析该框架中存在的缺点,指出这些缺点存在的原因,以及可能的改进方法。



【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2018-7-23 16:24 | 显示全部楼层
一、为何使用这种奇特的执行和绘图方式

框架中采用了一种特殊的执行机制:即事件阻塞执行,绘图无阻塞执行。
在一开始,框架是采用cocos2dx制作的,执行与绘图都是无阻塞的。但是该设计在适应原有事件时存在着一些不易处理的问题。

原版的事件包含诸多不同的指令,这些指令可以分为两类:需要暂停的,例如对话、菜单等;以及不需要暂停的,例如修改剧情等。前者在执行的时候必须暂停游戏流程,后者则可以一直执行下去。
如果仅用原来的事件执行方式,问题并不严重。因为按照原本的设计,事件是写成了一种类似二进制的执行码,由一个指针确定当前的执行位置,并依次执行。那么只要保存这个指针的位置,就能够实现事件的连续执行。

但是,如果指令是以lua脚本写成,则该指针的位置无法确定。或者可以提前将脚本整理为包含编号的语句,这样执行的位置则可以确定。但是该方法无法复用目前的剧情脚本,跳转需要剧情作者自行控制,与原本的方案比起来失去了脚本的灵活性。

因此,为了同时支持这两种情况,使用了这个奇特的执行方式,使图像不断刷新的同时,事件可以顺序执行。而其他框架实现的方式通常是每个事件结束时进行回调或发送全局消息。

二、对话的特殊模式

通常节点在执行的时候,均会将自己加入到root中以便在绘图时一起绘制。
但是对话指令的执行则不同,为了在对话时保留上次对话的绘图,仅有对话指令使用了特殊模式执行。
这是考虑了原版中,对话指令并不保留上一次的状态,而这里却希望加上这个效果。于是将talk分成两个部分,均加入root进行绘制,而执行的时候,仅执行当前的部分。这时因为两个对话框均已经在root中,因此不再将自身加入到root。

点评

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

本版积分规则

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

GMT+8, 2024-12-22 01:53

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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