新手c++ 源码_sdlpal仙剑源码正式研究(二)

说点纯干货吧。我本来还想蓄势铺垫的。

人对未知的内容都很恐慌。就比如说,我打算复刻一下仙剑奇侠传的源码。也就是纯c版本的sdlpal的源码。我要翻译成c++,lua+qt的版本。

5184b72119bab11cfadd2f1e50af7396.png

你说,这么多文件,凡是带h的c的,cpp的,都是要处理的。

72e7a588b10db124cef508ec02812174.png

这个游戏我玩过,但是到了至于怎么制造的时候,都是摸石头过河的感觉。我从game_main函数开始,一路顺藤摸瓜,先从菜单着手

8e6b43ba59fe49dfa5743d2a1a7f02fd.png

原理就是现学现用,很多函数,我不懂,我就改数字,改流程。我在屏幕上面加字。不懂的部分,就暂时使用c语言的原版。说白了就是跳过不懂的部分,去进行其他部分内容。

我原来好大喜功,上来就要搞懂数据结构和算法,结果现实教育了我。慢慢的我改成了顺藤摸瓜。

3c6802a60e9789000781f370fbb83682.png

在主循环里面有一个start frame函数。

而在start frame函数中,分两部分函数,一部分是gameupdate,这个是核心部分,我们这些新手,是不能上来就动它的。那么柿子挑软的捏,就处理下面的那些各种窗口操作。

ac7f261793da1e0b7994df7f109295de.png

因为这些东西所见即所得,所有源码虽然看不懂,但是我们可以通过修改坐标,就知道,这段代码写的是什么地方的图。

今天主要讲的就是斗争经验和方法。

目标就是先翻译成lua的脚本,这样的话,修改起来就容易了,光是lua+sdl,是不行的,缺少编辑器。所以要把sdl换成qt,借qt的东风。最终做成仙剑数据可视化编辑器。

流程由写死的代码,更换成行为树。现在的行为树都有图形化工具。

今天剩下的时间,我要做

bf17a7780bffe55a73b5934bd9672883.png

对就是 从物品到装备选项,

f00fece70e5c5ad739b65d8257d839af.png

再到装备整个过程。

8d8140fe766a150db1b7e3acf4c2bfc6.png

在play。c中,调用部分其实很少

94a0b7e2f47287e7d8a5e49991e037da.png

这个翻译起来很简单,下面的两个menu函数,可都是大家伙。待我下一篇慢慢到来。

343db8d16af1ed501da4ad98415346b7.png

翻译过来了。PAL_EquipItemMenuV2(d,select_opt) 真的好长

local functionName='PAL_EquipItemMenuV2'
class_t[functionName]=function(self,d,small_env)
	local t =small_env or {}
	local wItem=t.wItem

	local palcommon=d.palcommon
	local util=d.util
	local bit=d.bit
	-------------------------
	local fpBALL=d.fpBALL
	local fpFBP=d.fpFBP
	local g_InputState=d.g_InputState
	-----------------------------
	local gpScreen=d.gpScreen
	local gpGlobals=d.gpGlobals
	local gameData=gpGlobals:getGameData()
	local playerRoles=gameData:getPlayerRoles()	
	local rgParty =gpGlobals:getParty()
	gpGlobals.wLastUnequippedItem=wItem
	--------------------------------
	local bg_w,bg_h=d.bg_w,d.bg_h
	local size=bg_w*bg_h
	bufBackground=ByteVector(size)
	palcommon:MKFDecompressChunk(bufBackground,size, EQUIPMENU_BACKGROUND_FBPNUM,fpFBP)

	local bufImage=ByteVector(2048)
	--------------------------------
	local iCurrentPlayer=0
	local bSelectedColor = MENUITEM_COLOR_SELECTED_FIRST
	local dwColorChangeTime = lua_GetTicks() + (600 / MENUITEM_COLOR_SELECTED_TOTALNUM)
	------------------------------------------------------------------------------------		
	local dwKeyPress
	-------------------------
	local dst,item,obj
	local w,item_id,text,curr_flag
	local bColor
	
	while true do
		wItem=gpGlobals.wLastUnequipped
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值