RPGzh500223 发表于 2021-3-12 08:33 非常精彩。这就是乐趣啊!!! |
重新换种算法,写起来很简单,总的效率差不多,但牺牲了些精度,不太适合渐变色 11楼的方法,逐行描绘,颜色数值与行数建立关系,上下渐变色不要太简单……具体效率没测试不知有多大的影响
|
脚本绘制的图……还是用其他软件画出来的好看 横截线无论blt还是sprite.src_rect 动态环形血条 估计都不算卡 脚本是纯脚本绘制环形血条(感谢8楼,没试真不知道,真的不卡) 横截线就是简单 注释的那部分就实现了
|
这么麻烦要是我就直接弄垂直血条 |
本帖最后由 SailCat 于 2021-3-11 02:20 编辑 RMXP的bitmap处理效率不比RMVA差的,这个我很明确的测试过并得出结论 RMXP每帧纯做set_pixel能做8000次,你觉得你的血条里会有8000个像素点吗?就算有,能有16000个像素点吗?血不会每帧更新,刷血条时损失1帧又不是什么大不了的事。要知道不论RMXP还是RMVA,draw_text都是个奇慢的操作,你还经常一帧做几十次呢。 所以觉得RGSS直接做不了的,都是算法问题 有简易实现和完美实现两个办法 简易实现:特点是速度快,缺点是血条的水面是平的,不是正对圆心角的斜线。 首先制作2个空血条bitmap,作为底图传送成精灵,ox, oy设在圆心(也就是两个bitmap的左中点和右中点)(假设环直径100,底图都是50X100大小,例为血(50,50)和蓝(0,50))) 把它们的x, y设置在一起,显示出来就拼起来了 然后制作2个满血条bitmap,作为面图(z更高)传送成精灵,ox, oy,x,y也一起和前面的重合 然后根据你的血量蓝量百分比,改变两面图精灵的src_rect为高度的百分比,从底端算起,比如22%血,就传送(0,78,50,22)为血,40%蓝,就传送(0,60,50,40)为蓝 完毕了。 完美实现,底图一样,可简单用精灵做 面图的bitmap需要自己绘制: 血条直径100的话,需要执行至多100次bitmap#fill_rect(由于水平做比垂直做快,建议水平做) 以下改的是Window_Menustatus 总之不算难,效率也不差,水平做fill_rect一帧极限我记得是720次。垂直120次 这里有些复杂的三角函数运算,实际没那么多,反正在菜单中帧数大概36-37左右(我能说是被draw_text拖的么) RUBY 代码复制
多说两句,如果真嫌慢(实际上是伪命题,卡的话查其他地方),做0% 50% 100%三个基础环图,然后根据hp的比例在上面加加减减的fill_rect打补丁,因为补丁最多需要工作1/4的区间(平均期望1/8),故此能再快1/2左右,而且我现在这个算法是HP越满绘制量越高,正常玩家没有谁会放着黄血一直长时间不管的吧……但是实话说其实没啥继续优化的必要 |
Project7 - 40 FPS 2021_3_11 1_58_51.png (259.21 KB, 下载次数: 37)
参与人数 5 | 星屑 +150 | 赞 +4 | 收起 理由 |
---|---|---|---|
RyanBern | + 150 | 认可答案 | |
1390959782 | + 1 | 绝对高手,直呼牛逼,大佬 | |
阿尔卑斯 | + 1 | 棒棒棒 | |
enghao_lim | + 1 | 不赞不行 XD | |
89444640 | + 1 | 塞糖 |
大概的思路 纯脚本绘制话,估计win32api,太难了;直接rgss的话,效率…… 一张图片(如你给出的图)的话,看你是 简单的横截线 还是经过的圆心的线 横截线就如条形一样 算比例 直接blt 经过圆心的线的话,以角度表示血量多少 先算下圆环外员的交点,blt需要的矩形(自交点以下),这时会多出个很小的三角形的区域 clear_rect(就是填充透明色) 数学问题 清除掉多余的三角形区域 另类的方法 圆环旋转,只适用单色背景 首先大圆环 左边红 右边背景色 分成2张图片 小圆环 右边蓝 左边背景色 也是分成2张图片 红蓝blt 背景色的2张图,分别生成sprite 根据血量、蓝量旋转覆盖红环、蓝环 |
我想到一个方法,就是用图片显示,假设把 0%~100% 分成11张图片(分的有点粗),当前 hp 和 mp 符合哪个比例就显示哪张图片,楼主你看这个方法行得通吗? |
enghao_lim 发表于 2021-3-10 18:24 谢谢思路。虽然也不用图片的方法,但理解了方向。 |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-12-4 03:31
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.