DH-SRPG 三:单位的出战与部署-要闻速递
大多数战棋游戏都有予玩家在战斗开始前根据游戏的局势对作战单位的挑选以及位置部署的能力,本项目也是如此的。现在来看看在本项目中的单位出战功能与部署功能是如何实现的。
这是单位挑选场景的节点结构的折叠图(完整的节点树见文章末尾),有6部分:
(注:CR为custom_这个场景的缩写,没有实际意义)
(资料图片)
TitleCR:显示标题
UnitInfo: 显示Pointer指向的单位的信息。
InfoCR:显示如已出战人数等信息
UnitList:单位的列表,用来显示单位的图像与名字等缩略信息,该节点下面有一个TempUnitItem的单位模板
Items:显示功能选项,如“出击”和”观察“选项在这个节点下
Pointer:一个用来显示现在选中的项的框
属性:
start:这个方法用于启动并接受一个单位数组来设置这个场景。该方法由上一节介绍的Scene调用,单位数组就是由Scene的create_units方法提供的。
下面来是对于输入事件的处理
这里面做了两件事,一是在不同状态下的切换操作二是根据模式分配输入事件给不同的方法处理。
然后是对输入事件的一个拦截控制,因为在“观察模式”下,Scene的指针是需要接受得到输入事件来移动与查看场景信息的所以在“观察模式”不会拦截输入事件,而不是“观察模式”时,面板是显示的,不希望Scene的指针接受到输入事件来移动哦,所以需要用get_viewport().set_input_as_handled()方法来拦截输入事件阻止它继续传递。
_btn_list_move:处理Pointer在Items上的移动与点击,
在这个方法中,“出击”匹配项会发出了一个"depart_signal"信号,这个信号表示要开始进行战斗并代表玩家已经挑选好了出战的成员。这个信号在Scene节点进行连接:
可以看到这个游戏的开始由depart_signal这个信号决定的,这个lambda里面做了一些准备工作,例如关闭挑选界面的UI以及将我们挑选的这些单位的控制权交给玩家(其他没有挑选的单位都是没有控制权的)并将这些单位加入UnitManage来进行单位注册。
_unit_list_move:处理Pointer在单位列表上的移动与点击
可以看到这两个方法的逻辑与是大致相同的。
在发出"add_unit_signal"添加信号与"remove_unit_signal"删除信号时,都会由Scene节点的子节点Deploy处理。这个信号在Scene的_ready方法中进行连接:
Deploy:部署点,部署点是在挑选出战成员时可供单位部署的位置。
上一节有简要的概括。现在来详细看一下Deploy的使用方法。要使用Deploy需要先给它添加任意个有position属性的节点作为子节点。
它根据子节点来决定可选位的数量与位置。
在制作关卡时,只需要给它添加Sprite节点(其他的也可以)来决定部署点的位置。
不过目前部署点是在运行时决定的,如果需要多次使用Deploy与要在游戏过程中改变Deploy需要对这部分进行调整(后续应该会进行调整)。
Scene将PreparePlan的add_unit_signal与remove_unit_signal信号都交由Deploy进行处理,它们的实现很简单,就是遍历positions找到没有使用的位置就进行设置,或者找到要删除的unit就进行删除
在观察模式下进行单位位置的调整
上面在PreparePlan的_btn_list_move方法中有提到“观察模式”,在加入观察模式时,PreparePlan显示的节点将发生变化,它会隐藏部分面板,并且不再阻止输入事件的传递。这将允许玩家操作Scene的Pointer来操作部署点与查看敌方的棋子信息。
这时Scene将会根据Deploy的显示状态来将Pointer点击事件交给Deploy处理
deploy的pointer_callable方法会在没有选中unit时尝试进行选中,在已经选中unit时会尝试进行位置交换
这一系列的组合的效果:
在调整好位置后,就可以开始战斗了。
总结
PreparePlan决定出战单位,Deploy决定单位的位置。PreparePlan与Deploy之间没有直接联系,由Scene作为桥梁。这得益于Godot的信号机制。
在创建新关卡时,只需要给Deploy添加拥有位置属性的子节点即可。而最大出战人数则需要在PreparePlan的检查器中调整,需要勾选“子节点可编辑”选项。
下一节我们将介绍一下用于管理单位的UnitManage,看它是如何管理Unit的行动的。
致歉:因为项目的更新随时都有可能会破坏原有的代码,您在看到此文时它可能已经不是最新的了,请以现在项目的具体情况为准。欢迎大家给项目提Issues项目地址:/DH-DoveG/dh-srpg-demo
-
DH-SRPG 三:单位的出战与部署-要闻速递
哔哩哔哩 2023-06-29
-
鹰美(02368)将于9月15日派发特别股息每股0.06港元 每日热讯
智通财经 2023-06-29
-
宏观点评:如何看待生产和利润的“剪刀差”?
研报中心 2023-06-28
-
星辉娱乐6月28日快速反弹
东方财富Choice数据 2023-06-28
-
宁津签订今年首单政府采购电子合同
大众日报 2023-06-28
-
环球最新:湘潭电化股票代码是多少?湘潭电化股票行情怎么样?
新金融网 2023-06-28
-
山西医科大学第二医院开展“世界献血者日”宣教献血活动|最新快讯
山西省卫生健康委员会 2023-06-28
-
六方面政策助推中小企业练会“独门绝技” 今日热讯
经济参考报 2023-06-28
-
上海游泳馆设女性专用泳道:设在浅水区域,无需预约 天天消息
金羊网 2023-06-28
-
代表作近2年、3年同类排名前十,海富通基金经理杨宁嘉如何看待TMT板块?-热点评
大众证券报 2023-06-27
-
DH-SRPG 三:单位的出战与部署-要闻速递
哔哩哔哩 2023-06-29
-
空调怎么安装的_这些注意事项你需了解-世界最资讯
互联网 2023-06-29
-
动态焦点:不服?韩国女篮主帅:加时惜败中国因体能不支,韩国篮球并不落后
周佳骅 2023-06-29
-
环球聚焦:KuCoin(库币网)交易所怎么样?行情优势如何?
指股网 2023-06-29
-
鹰美(02368)将于9月15日派发特别股息每股0.06港元 每日热讯
智通财经 2023-06-29
-
每日速读!6月28日安恒信息跌6.20%,万家行业优选混合(LOF)基金重仓该股
证券之星 2023-06-28
-
宏观点评:如何看待生产和利润的“剪刀差”?
研报中心 2023-06-28
-
青木股份(301110.SZ)以4747万元竞得义乌市一宗地块
智通财经 2023-06-28
-
恒生指数收涨0.12% 恒生科技指数收涨0.75%-天天视讯
证券时报网 2023-06-28
-
热门车讯纳智捷5 Sedan配置升级 售10.88-17.58万
互联网 2023-06-28
-
【世界热闻】“5G+AI”将引发链式反应?孟晚舟最新发声
众赢智投 2023-06-28
-
炉石传说快攻DK卡组搭配教程
系统乐园 2023-06-28
-
全新一代丰田C-HR官图发布,提供混动和插混,预计明年引进国内
搜狐科技 2023-06-28
-
北京上线养老服务一网通查
环球网产经 2023-06-28
-
御银股份: 关于全资子公司出售资产的完成公告
证券之星 2023-06-28
-
2023新疆本科二批录取结果什么时候公布 多少天知道结果_今日观点
互联网 2023-06-28
-
合作法治宣讲团应邀开展宣讲活动
甘肃法制报 2023-06-28
-
环球新资讯:没有垃圾分类,被人说要捅死
110法律咨询 2023-06-28
-
泰国孕妇坠崖案当事人谈消失的她:年轻人择偶时要擦亮眼睛 找到真正的幸福 每日报道
互联网 2023-06-28
-
焦点速读:煤炭板块大涨!云煤能源、陕西黑猫等多股涨停,火电厂存煤约2亿吨再创历史新高
华夏时报 2023-06-28
-
外交部:将反间谍法同外国记者的采访活动相关联没有必要
齐鲁壹点 2023-06-28
-
《今日说法》解读《反间谍法》特别策划:守护国家安全_世界速读
正观新闻 2023-06-28
-
江西检察机关依法对张运来决定逮捕 全球速讯
正义网 2023-06-28
-
死刑!广州天河“1·11”驾车撞人案二审维持原判
大洋网 2023-06-28
-
星辉娱乐6月28日快速反弹
东方财富Choice数据 2023-06-28
-
英飞拓:筹划出售子公司英飞拓系统控制权
和讯 2023-06-28
-
今日热闻!魅族将亮相MWC 20 INFINITY无界版 车机互联展示
中关村在线 2023-06-28
-
观天下!LOL终于出新模式了!2v2v2v2斗魂竞技场7月20日上线
17173游戏 2023-06-28
-
【新要闻】Win11颜色管理设置教程
系统乐园 2023-06-28
-
前4个月五矿化工行业出口明显回稳|环球热闻
国际商报 2023-06-28