查看: 2692|回复: 4

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

[复制链接]
梦石
0
星屑
6835
在线时间
1251 小时
注册时间
2011-12-18
回帖
1127
发表于 2018-4-22 13:13:33 | 显示全部楼层 |阅读模式

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

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

×
想做以一個特定做標點為圓心畫圓(非實心)... 但不知道怎麼做... 找不到 RUBY的範例...
梦石
0
星屑
3069
在线时间
1054 小时
注册时间
2011-8-16
回帖
223
发表于 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

使用道具 举报

梦石
0
星屑
6835
在线时间
1251 小时
注册时间
2011-12-18
回帖
1127
 楼主| 发表于 2018-4-23 00:29:19 | 显示全部楼层
失落的乐章 发表于 2018-4-22 22:29
第一种方法是我自己写的,用的是圆的参数方程,效果不太好;
第二种方法是根据我在网上看到的画正多边形 ...

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

使用道具 举报

梦石
0
星屑
6891
在线时间
7027 小时
注册时间
2013-11-2
回帖
1263

开拓者剧作品鉴家

发表于 2018-4-23 01:24:57 | 显示全部楼层
[pre lang="ruby"]
class Bitmap
       
        def draw_ring(x,y,diameter,thickness,color)
                outer_radius = diameter / 2
                inner_radius = outer_radius - thickness + 1
                draw_circle_w_thickness(x,y,inner_radius,outer_radius,color)
        end
       
        def xLine(x1,x2,y,color)
                while x1 <= x2
                        self.set_pixel(x1,y,color)
                        x1 += 1
                end
        end
       
        def yLine(x,y1,y2,color)
                while y1 <= y2
                        self.set_pixel(x,y1,color)
                        y1 += 1
                end
        end
       
        def draw_circle_w_thickness(xc,yc,inner,outer,color)
               
                xo = outer
                xi = inner
                y = 0
                erro = 1 - xo
                erri = 1 - xi
               
                while(xo >= y)
                        xLine(xc + xi, xc + xo, yc + y,  color)
                        yLine(xc + y,  yc + xi, yc + xo, color)
                        xLine(xc - xo, xc - xi, yc + y,  color)
                        yLine(xc - y,  yc + xi, yc + xo, color)
                        xLine(xc - xo, xc - xi, yc - y,  color)
                        yLine(xc - y,  yc - xo, yc - xi, color)
                        xLine(xc + xi, xc + xo, yc - y,  color)
                        yLine(xc + y,  yc - xo, yc - xi, color)               
                       
                        y += 1
                       
                        if erro < 0
                                erro += 2 * y + 1
                        else
                                xo -= 1
                                erro += 2 * (y - xo + 1)
                        end
                       
                        if y > inner
                                xi = y
                        else
                                if erri < 0
                                        erri += 2 * y + 1
                                else
                                        xi -= 1
                                        erri += 2 * (y - xi + 1)
                                end
                        end
                       
                end               
        end
       
end
[/pre]

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部