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

Project1

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

[已经解决] 抱歉請問怎麼用RGSS做2D繪圖?

[复制链接]

Lv4.逐梦者

梦石
0
星屑
5753
在线时间
1170 小时
注册时间
2011-12-18
帖子
1291
跳转到指定楼层
1
发表于 2018-4-22 13:13:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
想做以一個特定做標點為圓心畫圓(非實心)... 但不知道怎麼做... 找不到 RUBY的範例...

Lv3.寻梦者

梦石
0
星屑
3039
在线时间
1052 小时
注册时间
2011-8-16
帖子
242
2
发表于 2018-4-22 22:29:13 | 只看该作者
本帖最后由 失落的乐章 于 2018-4-22 22:31 编辑
  1. class Bitmap
  2.   # 方法一
  3.   def draw_circle(a, b, r, color = Color.new(255, 255, 255))
  4.     (0...360).each do |s|
  5.       x = a + r * Math.cos(s)
  6.       y = b + r * Math.sin(s)
  7.       set_pixel(x, y, color)
  8.     end
  9.   end
  10.   
  11.   # 方法二
  12.   def draw_circle2(a, b, r, e = 3000, color = Color.new(255, 255, 255))
  13.     ca = 0
  14.     ai = 360 / e.to_f
  15.     hp = Math::PI / 180
  16.     (0..e).each do |s|
  17.       x = Math.cos(ca * hp) * r + a
  18.       y = Math.sin(ca * hp) * r + b
  19.       set_pixel(x, y, color)
  20.       ca += ai
  21.     end
  22.   end
  23. end

  24. t = Sprite.new
  25. t.bitmap = Bitmap.new(640, 480)
  26. t.bitmap.draw_circle(320, 240, 150)
  27. t.bitmap.draw_circle2(320, 240, 200)
  28. loop { Graphics.update }
复制代码


第一种方法是我自己写的,用的是圆的参数方程,效果不太好;
第二种方法是根据我在网上看到的画正多边形法改写的,默认用3000边形逼近圆,效果尚可。
回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5753
在线时间
1170 小时
注册时间
2011-12-18
帖子
1291
3
 楼主| 发表于 2018-4-23 00:29:19 | 只看该作者
失落的乐章 发表于 2018-4-22 22:29
第一种方法是我自己写的,用的是圆的参数方程,效果不太好;
第二种方法是根据我在网上看到的画正多边形 ...

有辦法做實心半透明或者調整浮點大小(圈線厚度)嗎?
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
6901
在线时间
7028 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

4
发表于 2018-4-23 01:24:57 | 只看该作者
RUBY 代码复制
  1. class Bitmap
  2.  
  3.         def draw_ring(x,y,diameter,thickness,color)
  4.                 outer_radius = diameter / 2
  5.                 inner_radius = outer_radius - thickness + 1
  6.                 draw_circle_w_thickness(x,y,inner_radius,outer_radius,color)
  7.         end
  8.  
  9.         def xLine(x1,x2,y,color)
  10.                 while x1 <= x2
  11.                         self.set_pixel(x1,y,color)
  12.                         x1 += 1
  13.                 end
  14.         end
  15.  
  16.         def yLine(x,y1,y2,color)
  17.                 while y1 <= y2
  18.                         self.set_pixel(x,y1,color)
  19.                         y1 += 1
  20.                 end
  21.         end
  22.  
  23.         def draw_circle_w_thickness(xc,yc,inner,outer,color)
  24.  
  25.                 xo = outer
  26.                 xi = inner
  27.                 y = 0
  28.                 erro = 1 - xo
  29.                 erri = 1 - xi
  30.  
  31.                 while(xo >= y)
  32.                         xLine(xc + xi, xc + xo, yc + y,  color)
  33.                         yLine(xc + y,  yc + xi, yc + xo, color)
  34.                         xLine(xc - xo, xc - xi, yc + y,  color)
  35.                         yLine(xc - y,  yc + xi, yc + xo, color)
  36.                         xLine(xc - xo, xc - xi, yc - y,  color)
  37.                         yLine(xc - y,  yc - xo, yc - xi, color)
  38.                         xLine(xc + xi, xc + xo, yc - y,  color)
  39.                         yLine(xc + y,  yc - xo, yc - xi, color)               
  40.  
  41.                         y += 1
  42.  
  43.                         if erro < 0
  44.                                 erro += 2 * y + 1
  45.                         else
  46.                                 xo -= 1
  47.                                 erro += 2 * (y - xo + 1)
  48.                         end
  49.  
  50.                         if y > inner
  51.                                 xi = y
  52.                         else
  53.                                 if erri < 0
  54.                                         erri += 2 * y + 1
  55.                                 else
  56.                                         xi -= 1
  57.                                         erri += 2 * (y - xi + 1)
  58.                                 end
  59.                         end
  60.  
  61.                 end               
  62.         end
  63.  
  64. end


draw_ring(绘制环)的参数:X位置,Y位置,直径,粗度,颜色
draw_circle_w_thickness(绘制空心圆)的参数:X位置,Y位置,内圈半径,外圈半径,颜色

效率不保证,毕竟2年前的玩意儿。记得是从C++移植到Ruby的吧。C++码来源:https://stackoverflow.com/questi ... s-drawing-algorithm

点评

請問如何讓繪製的圖層在行走圖之下?  发表于 2018-4-23 17:00

评分

参与人数 1+1 收起 理由
sdgn + 1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 05:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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