赞 | 28 |
VIP | 1 |
好人卡 | 12 |
积分 | 10 |
经验 | 18722 |
最后登录 | 2022-3-28 |
在线时间 | 145 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1023
- 在线时间
- 145 小时
- 注册时间
- 2013-10-16
- 帖子
- 271
|
本帖最后由 rpg-sheep 于 2015-2-23 17:07 编辑
三途亚梦 发表于 2015-2-22 18:03
迷叔才不是在意内衣是什么的那种痴汉!(雾)
功能要说自由…… 美工一瞬间就爆了泥造么……
亚梦大大,你提的建议我已经解决哒~
现在每一个物品的备注都有这三个
<type 6>
<pic sho>
<picz 31>
pic和picz可以是一个数组,如<pic sho,meow><picz 31,32>就表示这个装备有两张图片及其各自的z值。
@三途亚梦 @喵呜喵5 @taroxd 劳烦算法大神们可不可以帮我看看我获取图片z值的算法呢?感觉有些复杂化了,可不可以缩减一下省些内存?
#计算图像 allpic = [] # 当前全部图片的数组 allpicz = [] # 当前全部图片z值的数组,与上面对应 Clothes::MAX_COUNT.times {|index| equip = @actor.equip[index] if equip[0] == 1 allpic += $data_weapons[equip[1]].pic if $data_weapons[equip[1]].pic != 0 allpicz += $data_weapons[equip[1]].picz if $data_weapons[equip[1]].picz != 0 elsif equip[0] == 2 allpic += $data_armors[equip[1]].pic if $data_armors[equip[1]].pic != 0 allpicz += $data_armors[equip[1]].picz if $data_armors[equip[1]].picz != 0 end } temp = allpicz.sort # 将所有z值按从小到大排序 temp2 = [] # 建立index对应模型 temp3 = [] # 低于基础层的数组 temp4 = [] # 基础层与头发层之间的数组 temp5 = [] # 高于头发层的数组 temp.delete(allpicz[0]) if Clothes::NO_WEAPON && @actor.equip[0][1] != 0 && $data_weapons[@actor.equip[0][1]].pic != 0 temp.each_index {|index| temp2[index] = allpicz.index(temp[index]) # 返回allpicz中按大小的index排序。如allpicz为[7,1,9],temp2就返回[1,0,2] } temp2.each {|temp| # 根据allpicz中z值的大小把数据分成三个部分 if allpicz[temp].to_i < 0 # 舍弃小于0的数据 elsif allpicz[temp].to_i < 1000 # 将z值小于1000的数据放入第一层 temp3.push(temp) elsif allpicz[temp].to_i < 2000 # 将z值大于1000小于2000的数据放入第二层 temp4.push(temp) else # 将z值大于2000的数据放入第三层 temp5.push(temp) end } rect = Rect.new(0, 0, 300, window_height) # 描绘背景 contents.blt(0, 0, @actor.base_back, rect, 255) # 描绘低于基础的层 temp3.each {|temp| contents.blt(0, 0, Cache.cloth(allpic[temp]), rect, 255) } # 描绘基础模型 contents.blt(0, 0, @actor.base_body, rect, 255) # 描绘低于头发的层 temp4.each {|temp| contents.blt(0, 0, Cache.cloth(allpic[temp]), rect, 255) } # 描绘头发 contents.blt(0, 0, @actor.base_hair, rect, 255) # 描绘高于头发的层 temp5.each {|temp| contents.blt(0, 0, Cache.cloth(allpic[temp]), rect, 255) }
#计算图像
allpic = [] # 当前全部图片的数组
allpicz = [] # 当前全部图片z值的数组,与上面对应
Clothes::MAX_COUNT.times {|index|
equip = @actor.equip[index]
if equip[0] == 1
allpic += $data_weapons[equip[1]].pic if $data_weapons[equip[1]].pic != 0
allpicz += $data_weapons[equip[1]].picz if $data_weapons[equip[1]].picz != 0
elsif equip[0] == 2
allpic += $data_armors[equip[1]].pic if $data_armors[equip[1]].pic != 0
allpicz += $data_armors[equip[1]].picz if $data_armors[equip[1]].picz != 0
end
}
temp = allpicz.sort # 将所有z值按从小到大排序
temp2 = [] # 建立index对应模型
temp3 = [] # 低于基础层的数组
temp4 = [] # 基础层与头发层之间的数组
temp5 = [] # 高于头发层的数组
temp.delete(allpicz[0]) if Clothes::NO_WEAPON && @actor.equip[0][1] != 0 && $data_weapons[@actor.equip[0][1]].pic != 0
temp.each_index {|index|
temp2[index] = allpicz.index(temp[index]) # 返回allpicz中按大小的index排序。如allpicz为[7,1,9],temp2就返回[1,0,2]
}
temp2.each {|temp| # 根据allpicz中z值的大小把数据分成三个部分
if allpicz[temp].to_i < 0 # 舍弃小于0的数据
elsif allpicz[temp].to_i < 1000 # 将z值小于1000的数据放入第一层
temp3.push(temp)
elsif allpicz[temp].to_i < 2000 # 将z值大于1000小于2000的数据放入第二层
temp4.push(temp)
else # 将z值大于2000的数据放入第三层
temp5.push(temp)
end
}
rect = Rect.new(0, 0, 300, window_height)
# 描绘背景
contents.blt(0, 0, @actor.base_back, rect, 255)
# 描绘低于基础的层
temp3.each {|temp|
contents.blt(0, 0, Cache.cloth(allpic[temp]), rect, 255)
}
# 描绘基础模型
contents.blt(0, 0, @actor.base_body, rect, 255)
# 描绘低于头发的层
temp4.each {|temp|
contents.blt(0, 0, Cache.cloth(allpic[temp]), rect, 255)
}
# 描绘头发
contents.blt(0, 0, @actor.base_hair, rect, 255)
# 描绘高于头发的层
temp5.each {|temp|
contents.blt(0, 0, Cache.cloth(allpic[temp]), rect, 255)
}
至于人物行走图的变化(因为有4个方向)我也考虑到不能让美工受累,所以决定不用做的太精细(因为人物行走图清晰度肯定没有对话和菜单里的人物清晰度高的)
我的意思是“作者可以只设定一部分装备”,比如作者可以设置“外衣”会影响行走图,“鞋”不会(因为人们一般也不会突出鞋)。这样的话,如果并不需要过多的效果,就可以让美工少受累,只画作者需要的“外衣”这一种行走图就好。菜单中的变化,如果有作者不需要换装,可以设置左侧显示的内容,而不是人物立绘,这样这个系统就可以适配全部人群,各位大大觉得如何?
最后at一下为我提出好建议的吧友们
@芯☆淡茹水 @89444640 |
|