首页
|
编程语言
|
网站建设
|
游戏天堂
|
冲浪宝典
|
网络安全
|
操作系统
|
软件时空
|
硬件指南
|
病毒相关
|
IT 认证
软讯网络
>
编程语言
>
C/C++
> RPG程序框架探讨
【标 题】:RPG程序框架探讨
【关键字】:
RPG
【来 源】:http://www.cppblog.com/darkdestiny/archive/2006/12/25/16817.html
RPG程序框架探讨
C++博客 - On The Road - RPG程序框架探讨
On The Road
和C++相关的编程感悟
C++博客
首页
新随笔
联系
聚合
管理
posts - 41, comments - 61, trackbacks - 0
<
2006年12月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
《UNIX编程艺术》读书笔记 (4)
随笔档案
2006年12月 (5)
2006年10月 (7)
2006年9月 (4)
2006年8月 (8)
2006年7月 (6)
2006年6月 (6)
2006年5月 (5)
文章档案
技术
梦想风暴
千里马肝
云风
朋友
Innocence Space
搜索
最新评论
1.?re: 模版与多态
评论内容较长,点击标题查看
--小山日志
2.?re: 模版与多态
评论内容较长,点击标题查看
--Francis Arcanum
3.?re: 模版与多态
关注
--pengkuny
4.?re: college is for pussies——影评《录取通知》
不好意思!邮件没有收到!
我的msn: iverson7909@hotmail.com
qq:80498674
在重新加一遍吧!呵呵!
万恶的yahoo邮箱!:)
--ai
5.?re: college is for pussies——影评《录取通知》
你的邮箱就是msn号吧,我已经加进去了,并发送了QQ号.
有时间多交流~
PS:我的邮箱就是msn号
--LOGOS
阅读排行榜
1.?源码阅读(525)
2.?如何在游戏机制中使用AI/剧情脚本----基于LUA(488)
3.?从LUA看库的设计(399)
4.?聊内存池技术(371)
5.?谈类的初始化(363)
评论排行榜
1.?谈类的初始化(7)
2.?滥用assert(7)
3.?IPC,读《Unix编程艺术》某章感(6)
4.?关于两个编译选项 MD 和 MT(5)
5.?编程感悟(5)
RPG程序框架探讨
此前曾思考过脚本如何同程序结合,虽然有所悟,但却发现连惯的执行某个脚本的时候,某些指令要挂起游戏的行动逻辑,比如TALK,在anykey按下前,整个场景都不能控制,而必须关注在人物对话上。
这里所说的行动逻辑,是指类似于ACT游戏的主逻辑/主循环,没有对话,没有菜单,也没有脚本。
先声明一个常用的术语,windows_game_loop(简称wgl),也就是windows下常用的游戏主循环代码:
while
(run_game)?
{
??
while
(PeekMessage)?
{
????
??}
??
if
?(actived)?
{
????impl_game_loop();
??}
??
else
??WaitMessage();
}
好了,看看圣剑2所透露的RPG基本模块:
1,行动逻辑,也就是主循环game_loop,是一个wgl;
2,主菜单,CMenu类,包含状态,物品,魔法子系统。它的run()是一个wgl,因此菜单启动后,能够挂起行动逻辑;
3,脚本系统,会连惯的执行一个脚本文件;
4,消息队列,并不是winproc,消息队列每次每帧只执行一条消息,每帧并不能保证能完成执行,所以下一帧还会执行相同的动作,直到完成并删除该消息。重要的是,只要消息队列非空,就不会执行行动逻辑,暂时挂起它;
5,战斗系统,包含fight_menu,fight_good,fight_magic之类的东西,类似于一个mini_game。它的start()函数,是一个wgl;
6,对话系统,将由脚本系统和消息队列协作完成,对话时要挂起行动逻辑;
看行动逻辑,主菜单和战斗系统,它们都是wgl,因此可以单独封装成game_moudel,并注册到game_system下,由它驱动执行。
行动逻辑是非战斗时的逻辑,主要内容是控制player的运动,还有当player面向某个NPC并按下“对话键”后,触发该NPC执行其脚本。行动逻辑只能在空消息队列时才执行,这很重要。
对话系统。连续的对话,来源于NPC的脚本。NPC的脚本一口气的执行,但是对话必须一步步等待交互的来,如何做到?圣剑的解决方案是把对话指令转成消息,并放到消息队列中。
消息队列在wgl中挂起行动逻辑,使得player关注到对话上。消息队列执行一个NPC_TALK/PLAYER_TALK命令,显示对话文字,每帧不断的重复,直到player按下anykey,消息队列删除该消息,执行下一条消息,也许是NPC_TALK/PLAYER_TALK,这样对话就得到了延续。
看这样一个对话脚本,其中每个command都变成消息加入到消息队列,自然就能挂起行动逻辑完成对话了:
NPC_TALK?
"
Hello,?My?friend
"
PLAYER_TALK?
"
Hello,?What's?up
"
NPC_TALK?
"
Maybe?you?need?a?sword
"
PUT_ITEM?sword
TALK?
"
You?get?a?sword
"
但是,消息队列并不能很好的解决含选择项对话的问题,因为不期望脚本被阻塞(多数是由于图形引擎结构引起,不希望把刷新挂进某个函数内,虽然可以这么做),比如:
ret?
=
?NPC_CHOISE(
"
You?are?Saber?
"
?,
"
YES
"
?,
"
NO
"
)
if
?(ret?
==
?
"
YES
"
)
??NPC_TALK?
"
Hello,?Saber
"
??NPC_TALK?
"
I?think?you?need?a?sword
"
??PUT_ITEM?sword
??PLAYER_TALK?
"
Thanks
"
else
??NPC_TALK?
"
Oh,?byebye
"
end?
if
以上,就是队列不能解决的脚本···除非NPC_CHOISE是一个wgl
posted on 2006-12-25 11:03
LOGOS
阅读(182)
评论(0)
编辑
收藏
收藏至365Key
硬件兼容性的陷阱,DrawIndexedPrimitiveUP的用法
:【上一篇】
全排序
:【下一篇】
【相关文章】
RPGLE定义外部数据结构
浅谈RPG核心系统
圣III 基本决定改制成 3D-ARPG
MMORPG技能系统设计
MMORPG开发杂谈(四):为什么要有最高等级限制
RPG游戏边学边做之一
如何在RPG中应用没有RECORD名称的PF
MMORPG开发杂谈(三):免费VS收费
简单的SQLRPGLE
RPG开源应用的未来在哪里?
【随机文章】
入侵
编程概念的理解
ADSL上网速度慢的原因及快速排除方法
S788J1 S110端接工具
关天asp.net ajax beta中在updatepnael中注册脚本的解决方案
打造独一无二的QQ聊天场景
QQ盗取之七招八式揭密(4)
ibm 培训课程编号
使用 php4 加速 web 传输
VC++之List Box/Check List Box控件
【相关评论】
没有相关评论
【发表评论】
姓名:
邮件:
随机码
*
:
评论
*
:
|
首 页
|
版权声明
| 联系我们
|
网站地图
|
CopyRight © 2004-2007
软讯
网络 All Rigths Reserved.