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

Project1

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

[已经解决] 水平线描画

[复制链接]

Lv2.观梦者

永无止境的旅程

梦石
0
星屑
503
在线时间
1552 小时
注册时间
2012-6-19
帖子
1226

开拓者贵宾

1
发表于 2019-4-13 00:53:11 | 显示全部楼层
  1. class Bitmap
  2.   #--------------------------------------------------------------------------
  3.   # ● 描绘直线   
  4.   #     x1,y1,x2,y2:  直线两端的坐标
  5.   #     width:    宽度  
  6.   #     color:    颜色
  7.   #--------------------------------------------------------------------------
  8.   def drawline(x1, y1, x2, y2, width, color)
  9.     x1 = x1.to_f
  10.     y1 = y1.to_f
  11.     x2 = x2.to_f
  12.     y2 = y2.to_f
  13.     width = width.to_f
  14.     k = (y2 - y1) / (x2 - x1)
  15.     if k.abs > 1
  16.       drawline_x(x1, y1, x2, y2, width, color)
  17.     else
  18.       drawline_y(x1, y1, x2, y2, width, color)
  19.     end
  20.   end
  21.   def drawline_x(x1, y1, x2, y2, width, color)
  22.     l = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 * width / (y1 - y2)
  23.     length = l.abs * 2
  24.     k = (x2 - x1) / (y2 - y1) #x=ky+b
  25.     b = x1 - k * y1
  26.     if l > 0
  27.       for ty in y2.to_i..y1.to_i
  28.         tx = ty * k + b
  29.         fill_rect(tx - l, ty, length, 1, color)
  30.       end
  31.     else
  32.       for ty in y1.to_i..y2.to_i
  33.         tx = ty * k + b
  34.         fill_rect(tx + l, ty, length, 1, color)
  35.       end
  36.     end
  37.   end
  38.   def drawline_y(x1, y1, x2, y2, width, color)
  39.     l = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 * width / (x1 - x2)
  40.     height = l.abs * 2
  41.     k = (y2 - y1) / (x2 - x1) #y=kx+b
  42.     b = y1 - k * x1
  43.     if l > 0
  44.       for tx in x2.to_i..x1.to_i
  45.         ty = tx * k + b
  46.         fill_rect(tx, ty - l, 1, height, color)
  47.       end
  48.     else
  49.       for tx in x1.to_i..x2.to_i
  50.         ty = tx * k + b
  51.         fill_rect(tx, ty + l, 1, height, color)
  52.       end
  53.     end
  54.   end
  55. end
复制代码

  1. 使用方式
  2. @sprite = Sprite.new
  3. @sprite.bitmap = Bitmap.new(100,100)
  4. @sprite.bitmap.drawline(0,0,100,100,Color.new(255,255,255))
复制代码

评分

参与人数 1星屑 +30 收起 理由
VIPArcher + 30 认可答案

查看全部评分

[url=https://rpg.blue/thread-389697-1-1.html]https://rpg.blue/https://rpg.blue/data/attachment/forum/201602/26/220128cfbxxs47xth4xkz4.jpg[/url]
<font size="5">[color=Green][url=https://rpg.blue/forum.php?mod=viewthread&tid=396208&extra=page%3D1][color=DeepSkyBlue]全新配套ACT系统,每周末一大更新,尽请期待。[/color][/url][/color]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-8 09:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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