设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2868|回复: 2
打印 上一主题 下一主题

[已经解决] 人物能力状态图的多边形网状绘制如何改成四边形的?

[复制链接]

Lv1.梦旅人

井蓝

梦石
0
星屑
58
在线时间
351 小时
注册时间
2011-1-14
帖子
277
跳转到指定楼层
1
发表于 2012-5-20 14:38:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这个脚本的攻击和防御用不到- -只需要显示其余的4个能力,就是不显示攻击和防御,,

结果自己鼓捣了半天- -四边形还是搞不出来
  1. #---------------------------------------------------
  2. # 本脚本来自66RPG.com,作者Deathless
  3. #---------------------------------------------------
  4. #-----------------------------------------------------
  5. # 功能设定
  6. # 当=1和=2,会改变图形的大小
  7. # =1的时候,图形为每个人自身的能力分配,最大数就是顶点
  8. # =2的时候,图形为所有人的能力分配,顶点为999
  9. #
  10. # 如果不需要999这么大,本脚本中搜索
  11. # "c[i] = get_position(a[0][0], a[0][1], a[i+1][0], a[i+1][1], b[i] / 999.0)"
  12. # 把这个999修改了即可。
  13. #-----------------------------------------------------
  14. ST_DRAW_SIX_LINES_TYPE = 2
  15. class Bitmap
  16.   #--------------------------------------------------------------------------
  17.   # ● 描绘直线     
  18.   #     x1,y1,x2,y2:  直线两端的坐标
  19.   #     width:    宽度   
  20.   #     color:    颜色
  21.   #--------------------------------------------------------------------------
  22.   def drawline(x1, y1, x2, y2, width, color)
  23.     x1 = x1.to_f
  24.     y1 = y1.to_f
  25.     x2 = x2.to_f
  26.     y2 = y2.to_f
  27.     width = width.to_f
  28.     k = (y2 - y1) / (x2 - x1)
  29.     if k.abs > 1
  30.       drawline_x(x1, y1, x2, y2, width, color)
  31.     else
  32.       drawline_y(x1, y1, x2, y2, width, color)
  33.     end
  34.   end
  35.   def drawline_x(x1, y1, x2, y2, width, color)
  36.     l = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 * width / (y1 - y2)
  37.     length = l.abs * 2
  38.     k = (x2 - x1) / (y2 - y1) #x=ky+b
  39.     b = x1 - k * y1
  40.     if l > 0
  41.       for ty in y2.to_i..y1.to_i
  42.         tx = ty * k + b
  43.         fill_rect(tx - l, ty, length, 1, color)
  44.       end
  45.     else
  46.       for ty in y1.to_i..y2.to_i
  47.         tx = ty * k + b
  48.         fill_rect(tx + l, ty, length, 1, color)
  49.       end
  50.     end
  51.   end
  52.   def drawline_y(x1, y1, x2, y2, width, color)
  53.     l = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 * width / (x1 - x2)
  54.     height = l.abs * 2
  55.     k = (y2 - y1) / (x2 - x1) #y=kx+b
  56.     b = y1 - k * x1
  57.     if l > 0
  58.       for tx in x2.to_i..x1.to_i
  59.         ty = tx * k + b
  60.         fill_rect(tx, ty - l, 1, height, color)
  61.       end
  62.     else
  63.       for tx in x1.to_i..x2.to_i
  64.         ty = tx * k + b
  65.         fill_rect(tx, ty + l, 1, height, color)
  66.       end
  67.     end
  68.   end
  69. end
  70. class Window_Status < Window_Base
  71.   def get_position(x_begin, y_begin, x_end, y_end, percent)
  72.     a = []
  73.     a[0] = x_begin + (x_end - x_begin) * percent
  74.     a[1] = y_begin + (y_end - y_begin) * percent
  75.     return a
  76.   end
  77.   def refresh
  78.     self.contents.clear
  79.     x0 = 60 #图表的坐标
  80.     y0 = 220
  81.     r = 100.0 #图表的大小,友情提示:浮点数后面的.0不要省略了
  82.     h = 3 ** 0.5 * r / 2
  83.     a = [] #六边形的顶点和圆心
  84.     a[0] = [r, h] #圆心
  85.     a[1] = [r / 2, 0.0]
  86.     a[2] = [r * 3 / 2, 0.0]
  87.     a[6] = [0.0, h]
  88.     a[3] = [r * 2, h]
  89.     a[5] = [r / 2, h * 2]
  90.     a[4] = [r * 3 / 2, h * 2]
  91.     for i in a
  92.       i[0] += x0
  93.       i[1] += y0
  94.     end
  95.     self.contents.font.color = system_color
  96.     self.contents.draw_text(a[1][0] - 16 , a[1][1] - 32, 80, 32, "攻")
  97.     self.contents.draw_text(a[2][0] - 4, a[2][1] - 32, 80, 32, "防")
  98.     self.contents.draw_text(a[6][0] - 28, a[6][1] - 16, 80, 32, "力")
  99.     self.contents.draw_text(a[5][0] - 16, a[5][1], 80, 32, "敏")
  100.     self.contents.draw_text(a[4][0] - 4, a[4][1], 80, 32, "速")
  101.     self.contents.draw_text(a[3][0] + 8, a[3][1] - 16, 80, 32, "魔")
  102.     #描绘边框
  103.     for i in 1...a.size
  104.       self.contents.drawline(a[0][0], a[0][1], a[i][0], a[i][1], 1, disabled_color)
  105.     end
  106.     self.contents.drawline(a[1][0], a[1][1], a[2][0], a[2][1], 1, text_color(6))
  107.     self.contents.drawline(a[2][0], a[2][1], a[3][0], a[3][1], 1, text_color(6))
  108.     self.contents.drawline(a[3][0], a[3][1], a[4][0], a[4][1], 1, text_color(6))
  109.     self.contents.drawline(a[4][0], a[4][1], a[5][0], a[5][1], 1, text_color(6))
  110.     self.contents.drawline(a[5][0], a[5][1], a[6][0], a[6][1], 1, text_color(6))
  111.     self.contents.drawline(a[6][0], a[6][1], a[1][0], a[1][1], 1, text_color(6))
  112.     #描绘能力曲线
  113.     b = [] #获取能力值
  114.     b.push(@actor.atk)
  115.     b.push(@actor.pdef)
  116.     b.push(@actor.int)
  117.     b.push(@actor.agi)
  118.     b.push(@actor.dex)
  119.     b.push(@actor.str)
  120.     case ST_DRAW_SIX_LINES_TYPE
  121.     when 2
  122.       #跟999作比较
  123.       c = []
  124.       for i in 0...b.size
  125.         c[i] = get_position(a[0][0], a[0][1], a[i+1][0], a[i+1][1], b[i] / 999.0)
  126.       end
  127.       for i in 0...c.size
  128.         self.contents.drawline(c[i][0], c[i][1], c[i-1][0], c[i-1][1], 1, text_color(3))
  129.       end     
  130.     when 1
  131.       #跟最高能力值比较
  132.       max_abi = 0
  133.       b.each{|i| max_abi = [max_abi, i].max}
  134.       max_abi = max_abi.to_f
  135.       c = [] #获得能力值的坐标
  136.       for i in 0...b.size
  137.         c[i] = get_position(a[0][0], a[0][1], a[i+1][0], a[i+1][1], b[i] / max_abi)
  138.       end
  139.       for i in 0...c.size
  140.         self.contents.drawline(c[i][0], c[i][1], c[i-1][0], c[i-1][1], 1, text_color(3))
  141.       end   
  142.     end
  143.     #描绘能力数值
  144.     self.contents.font.color = knockout_color
  145.     self.contents.font.size = 14
  146.     for i in 0...b.size
  147.       self.contents.draw_text(c[i][0], c[i][1], 32, 24, b[i].to_s)
  148.     end
  149.     self.contents.font.size = 22
  150.     #以下未修改     
  151.     draw_actor_graphic(@actor, 40, 112)
  152.     draw_actor_name(@actor, 4, 0)
  153.     draw_actor_class(@actor, 4 + 144, 0)
  154.     draw_actor_level(@actor, 96, 32)
  155.     draw_actor_state(@actor, 96, 64)
  156.     draw_actor_hp(@actor, 96, 112, 172)
  157.     draw_actor_sp(@actor, 96, 144, 172)
  158.     self.contents.font.color = system_color
  159.     self.contents.draw_text(320, 48, 80, 32, "EXP")
  160.     self.contents.draw_text(320, 80, 80, 32, "NEXT")
  161.     self.contents.font.color = normal_color
  162.     self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)
  163.     self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2)
  164.     self.contents.font.color = system_color
  165.     self.contents.draw_text(320, 160, 96, 32, "装备")
  166.     draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 208)
  167.     draw_item_name($data_armors[@actor.armor1_id], 320 + 16, 256)
  168.     draw_item_name($data_armors[@actor.armor2_id], 320 + 16, 304)
  169.     draw_item_name($data_armors[@actor.armor3_id], 320 + 16, 352)
  170.     draw_item_name($data_armors[@actor.armor4_id], 320 + 16, 400)
  171.   end
  172. end
复制代码

Lv1.梦旅人

梦·贤者

梦石
0
星屑
50
在线时间
1141 小时
注册时间
2007-12-15
帖子
4100
2
发表于 2012-5-20 15:02:13 | 只看该作者
  1. #---------------------------------------------------
  2. # 本脚本来自66RPG.com,作者Deathless
  3. #---------------------------------------------------
  4. #-----------------------------------------------------
  5. # 功能设定
  6. # 当=1和=2,会改变图形的大小
  7. # =1的时候,图形为每个人自身的能力分配,最大数就是顶点
  8. # =2的时候,图形为所有人的能力分配,顶点为999
  9. #
  10. # 如果不需要999这么大,本脚本中搜索
  11. # "c[i] = get_position(a[0][0], a[0][1], a[i+1][0], a[i+1][1], b[i] / 999.0)"
  12. # 把这个999修改了即可。
  13. #-----------------------------------------------------
  14. ST_DRAW_SIX_LINES_TYPE = 2
  15. class Bitmap
  16.   #--------------------------------------------------------------------------
  17.   # ● 描绘直线     
  18.   #     x1,y1,x2,y2:  直线两端的坐标
  19.   #     width:    宽度   
  20.   #     color:    颜色
  21.   #--------------------------------------------------------------------------
  22.   def drawline(x1, y1, x2, y2, width, color)
  23.     x1 = x1.to_f
  24.     y1 = y1.to_f
  25.     x2 = x2.to_f
  26.     y2 = y2.to_f
  27.     width = width.to_f
  28.     k = (y2 - y1) / (x2 - x1)
  29.     if k.abs > 1
  30.       drawline_x(x1, y1, x2, y2, width, color)
  31.     else
  32.       drawline_y(x1, y1, x2, y2, width, color)
  33.     end
  34.   end
  35.   def drawline_x(x1, y1, x2, y2, width, color)
  36.     l = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 * width / (y1 - y2)
  37.     length = l.abs * 2
  38.     k = (x2 - x1) / (y2 - y1) #x=ky+b
  39.     b = x1 - k * y1
  40.     if l > 0
  41.       for ty in y2.to_i..y1.to_i
  42.         tx = ty * k + b
  43.         fill_rect(tx - l, ty, length, 1, color)
  44.       end
  45.     else
  46.       for ty in y1.to_i..y2.to_i
  47.         tx = ty * k + b
  48.         fill_rect(tx + l, ty, length, 1, color)
  49.       end
  50.     end
  51.   end
  52.   def drawline_y(x1, y1, x2, y2, width, color)
  53.     l = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 * width / (x1 - x2)
  54.     height = l.abs * 2
  55.     k = (y2 - y1) / (x2 - x1) #y=kx+b
  56.     b = y1 - k * x1
  57.     if l > 0
  58.       for tx in x2.to_i..x1.to_i
  59.         ty = tx * k + b
  60.         fill_rect(tx, ty - l, 1, height, color)
  61.       end
  62.     else
  63.       for tx in x1.to_i..x2.to_i
  64.         ty = tx * k + b
  65.         fill_rect(tx, ty + l, 1, height, color)
  66.       end
  67.     end
  68.   end
  69. end
  70. class Window_Status < Window_Base
  71.   def get_position(x_begin, y_begin, x_end, y_end, percent)
  72.     a = []
  73.     a[0] = x_begin + (x_end - x_begin) * percent
  74.     a[1] = y_begin + (y_end - y_begin) * percent
  75.     return a
  76.   end
  77.   def refresh
  78.     self.contents.clear
  79.     x0 = 60 #图表的坐标
  80.     y0 = 220
  81.     r = 80.0 #图表的大小,友情提示:浮点数后面的.0不要省略了
  82.     #h = 3 ** 0.5 * r / 2
  83.     a = []
  84.     a[0] = [r,r]
  85.     a[1] = [r,0]
  86.     a[2] = [2*r,r]
  87.     a[3] = [r,2*r]
  88.     a[4] = [0,r]
  89.     for i in a
  90.       i[0] += x0
  91.       i[1] += y0
  92.     end
  93.     self.contents.font.color = system_color
  94.     self.contents.draw_text(a[1][0] - 8, a[1][1] - 32, 80, 32, "力")
  95.     self.contents.draw_text(a[2][0] + 8, a[2][1] - 16, 80, 32, "敏")
  96.     self.contents.draw_text(a[3][0] - 8, a[3][1], 80, 32, "速")
  97.     self.contents.draw_text(a[4][0] - 32, a[4][1] - 16, 80, 32, "魔")
  98.     #描绘边框
  99.     for i in 1...a.size
  100.       self.contents.drawline(a[0][0], a[0][1], a[i][0], a[i][1], 1, disabled_color)
  101.     end
  102.     self.contents.drawline(a[1][0], a[1][1], a[2][0], a[2][1], 1, text_color(6))
  103.     self.contents.drawline(a[2][0], a[2][1], a[3][0], a[3][1], 1, text_color(6))
  104.     self.contents.drawline(a[3][0], a[3][1], a[4][0], a[4][1], 1, text_color(6))
  105.     self.contents.drawline(a[4][0], a[4][1], a[1][0], a[1][1], 1, text_color(6))

  106.     #描绘能力曲线
  107.     b = [] #获取能力值
  108.     b.push(@actor.int)
  109.     b.push(@actor.agi)
  110.     b.push(@actor.dex)
  111.     b.push(@actor.str)
  112.     case ST_DRAW_SIX_LINES_TYPE
  113.     when 2
  114.       #跟999作比较
  115.       c = []
  116.       for i in 0...b.size
  117.         c[i] = get_position(a[0][0], a[0][1], a[i+1][0], a[i+1][1], b[i] / 999.0)
  118.       end
  119.       for i in 0...c.size
  120.         self.contents.drawline(c[i][0], c[i][1], c[i-1][0], c[i-1][1], 1, text_color(3))
  121.       end     
  122.     when 1
  123.       #跟最高能力值比较
  124.       max_abi = 0
  125.       b.each{|i| max_abi = [max_abi, i].max}
  126.       max_abi = max_abi.to_f
  127.       c = [] #获得能力值的坐标
  128.       for i in 0...b.size
  129.         c[i] = get_position(a[0][0], a[0][1], a[i+1][0], a[i+1][1], b[i] / max_abi)
  130.       end
  131.       for i in 0...c.size
  132.         self.contents.drawline(c[i][0], c[i][1], c[i-1][0], c[i-1][1], 1, text_color(3))
  133.       end   
  134.     end
  135.     #描绘能力数值
  136.     self.contents.font.color = knockout_color
  137.     self.contents.font.size = 14
  138.     for i in 0...b.size
  139.       self.contents.draw_text(c[i][0], c[i][1], 32, 24, b[i].to_s)
  140.     end
  141.     self.contents.font.size = 22
  142.     #以下未修改     
  143.     draw_actor_graphic(@actor, 40, 112)
  144.     draw_actor_name(@actor, 4, 0)
  145.     draw_actor_class(@actor, 4 + 144, 0)
  146.     draw_actor_level(@actor, 96, 32)
  147.     draw_actor_state(@actor, 96, 64)
  148.     draw_actor_hp(@actor, 96, 112, 172)
  149.     draw_actor_sp(@actor, 96, 144, 172)
  150.     self.contents.font.color = system_color
  151.     self.contents.draw_text(320, 48, 80, 32, "EXP")
  152.     self.contents.draw_text(320, 80, 80, 32, "NEXT")
  153.     self.contents.font.color = normal_color
  154.     self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)
  155.     self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2)
  156.     self.contents.font.color = system_color
  157.     self.contents.draw_text(320, 160, 96, 32, "装备")
  158.     draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 208)
  159.     draw_item_name($data_armors[@actor.armor1_id], 320 + 16, 256)
  160.     draw_item_name($data_armors[@actor.armor2_id], 320 + 16, 304)
  161.     draw_item_name($data_armors[@actor.armor3_id], 320 + 16, 352)
  162.     draw_item_name($data_armors[@actor.armor4_id], 320 + 16, 400)
  163.   end
  164. end
复制代码

点评

好吧- -看来那个压缩比例有点问题了,如果值小于100那么几乎看不出来,会挤在一起,改成1号功能就行了= =  发表于 2012-5-20 17:18
http://rpg.blue/home.php?mod=space&uid=34951&do=blog&id=12799
回复

使用道具 举报

Lv1.梦旅人

井蓝

梦石
0
星屑
58
在线时间
351 小时
注册时间
2011-1-14
帖子
277
3
 楼主| 发表于 2012-5-20 17:00:41 | 只看该作者
tommay 发表于 2012-5-20 15:02


很奇葩的数字挤在了一起,而且内部曲线也木有描绘

点评

我这里测试没有问题,你的这几项参数不会都是零吧  发表于 2012-5-20 17:12
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 10:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表