|
发表于 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、武器攻击距离可以设置小数
|
|