站内搜索

搜索
热搜: 活动 交友 discuz

iFAction 世界需要你的想象力!

[已解决] 新人入坑有,关于武器模型和攻击范围有疑惑~

2

主题

5

帖子

72

积分

iF基础方块

Rank: 3Rank: 3

积分
72
发表于 2020-7-9 23:38:24 | 显示全部楼层 |阅读模式
本帖最后由 JT飞 于 2020-7-10 22:12 编辑

刚【cang】刚【ku】入【chi】坑【hui】,有很多问题的说。刚刚看了一些B站的教学视频,但是有两个疑惑没能找到解答。

1. 武器模型是必须和角色模型一起绘制的么?当然也不仅限于武器,还有服装。

    因为我看到教学视频中有演示简易的内置纸娃娃系统,但是在选项中直接对角色进行更改装备的话,角色的立绘是不会发生变化的。比如如果把官方1号角色的铁剑去掉,人物立绘并不会变成空手。似乎纸娃娃系统只能用来快速生成立绘,不能让角色在游戏中随着装备变化而改变立绘?还是说我并未找到对应的功能呢?


2. 攻击范围判定。这个我通过教程和软件内设置角色攻击帧所观察到的,攻击范围【这里指近战】判定似乎是方格?看起来似乎是从角色作为中心设置向前或者某个方向的几个单元格?这个攻击判定的范围可以自由设置形状么?还是一定要是单元格的形式呢?比如我可以把攻击范围设置成扇形或者线形么?


期待大佬们的解答,其实一直都很想试着做一些自己脑海中的想法。但是高中时接触了RPG制作大师,尴尬的发现自己并不会编程,折腾了几个月的地图还有人物和建筑模型之后,就放弃了。后来大学也接触了一些简单的编程【毕竟要恰学分的嘛】,前些时候在steam看到了这个软件,说真的感觉从制作便利性上来讲,真的感觉太棒了。虽然官方素材少了点【小声bb】。总之,可能这次也是三分钟热度吧……【叹气】但在热度还在的期间,希望大佬们能给予一些帮助~这边先提前谢谢啦~

31

主题

304

帖子

1557

积分

管理员

iFAction缔造者

Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22

积分
1557

iFAction学院校长

发表于 2020-7-10 16:52:34 | 显示全部楼层
我来对号入座回答你的问题吧

问题一:
应该是个类似动态纸娃娃系统,当然默认的脚本确实是不支持的,这主要是由于拆分成单个部件制作资源会极大的增加游戏美术制作的成本,我们在魔改部分资源后,也能因为资源尺寸的修改,也会使得所有武器的资源可能都会失效,这样会极大的增加开发者的游戏制作成本。

当然,当我们成为一个熟练的开发者后,其实我们想实现对应的功能并不难,我下面给你大概讲一下实现思路

0、思路整理

首先我们想要实现这个功能,我们就要知道它具体的原理,他其实就是在显示角色的时候同时显示武器、防具上绑定的图像,也就是相当于多张图像叠加在一起,并且每帧更新对应的动画和坐标即可。

1、准备资源
首先我们需要准备人物的素体资源,然后我们还要准备单独部件的资源,人物,还有素体我们都需要单独添加在【资源】、【角色】中

2、设置数据
由于我们武器上没有绑定图像的数据,所以我们第二步需要想考虑怎么绑定对应的数据,我们可以从武器防具的名称入手
比如我们的武器叫做【铁剑】,那我们现在考虑,比如我们铁剑上想要绑定3号角色,我们可以 把铁剑的名字改为【铁剑#3】这样我们在脚本中将名称使用 split函数 来分割 # 号,我们就可以得到 【铁剑】、与【3】两个变量了,这样也就完成数据绑定

3、修改脚本
3.1修改数据结构部分
我们需要修改武器和防具的数据结构部分DSetArms(武器)、DSetArms(防具)
我们找到
this.name部分
我们将其修改为
var tempData =  rd.readString().split("#");
this.name = tempData[0];
if(tempData.length > 1)this.textures = tempData[1];

注意DSetArms、DSetArms都要如法炮制哦
这样我们的武器名称就是就还是原名称,如果遇到#分隔符,就新添加一个textures 的字段,作为武器的动作图像

3.2 修改资源绘制部分
我们需要修改LActor脚本

我们找到
var character = new LCharacters(resData,view,z,data,block);

大约69行附近,这一行,就是我们负责城镇人物贴图的部分

我们的第一个参数 resData就是 角色的资源的数据

这里修改的工作量就非常复杂了,我给出核心实现的方法,但是更具体的代码实现像是图层,释放,替换装备自动刷新服装等问题,就需要你自己摸索了

3.2.1 定义变量
定义一个数组,用来保存,需要一起绘制的角色动作图像,添加在15~60行之间都可以

var textures = [];

定义一个新的公开函数,用于在角色生成后来绘制对应的图像

this.drawTextures = function(){
   for(var key in RV.GameData.actor.equips){//遍历全部装备
      var id = RV.GameData.actor.equips[key];//获得装备对应id号
      var data = null;
      if(key == -1){//武器的场合
          data = RV.NowSet.setArms[id];
      } else{//防具
          data = RV.NowSet.setArmor[id];
      }
      if(data != null && data.textures != null){
         var rId = RV.NowRes.findResActor(data.textures);//通过武器的配置数据获得资源id
         textures[key] = new LCharacters(resData,view,z,data,block); //生成对应实例
      }
   }
}

以上部分就是核心代码
之后就是遍历 textures 在LActor的update函数中校准坐标,在dispose函数中同步释放
在GActor中的equipUpdate函数中刷新角色装备数据
在LMap的角色创建中为actor调用drawTextures函数了。

问题二:
这个就很简单了

武器的攻击范围是一个矩形
ACT模式下
矩形宽度 = 角色判定宽度 + 武器工具距离 * 48
矩形高度 = 角色判定高度

Tips:
1、角色判定区域可以在【资源】【角色/特殊物】中进行修改(每帧图像右下角的小方块)
2、武器攻击距离可以设置小数

2

主题

5

帖子

72

积分

iF基础方块

Rank: 3Rank: 3

积分
72
 楼主| 发表于 2020-7-10 19:13:13 | 显示全部楼层
本帖最后由 JT飞 于 2020-7-10 20:00 编辑
七夕小雨 发表于 2020-7-10 16:52
我来对号入座回答你的问题吧

问题一:

非常感谢您的解答~第一部分虽然很复杂,但是我会尝试的。顺便……原来还可以设置小数么喂!我以为必须是整数来着……囧

总的来说这个软件感觉真的很棒~如果不是去较真非要实现某些功能的话,绝大部分能想到的效果都可以非常便利的实现,超级赞!【拇指
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系我们
QQ群:977585123
iFAction下载
Windows客户端
反馈
意见建议
iFAction

iFAction

京ICP备15053274号-1

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.