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

Project1

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

如果让RM填充不规则图形?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
66
在线时间
1 小时
注册时间
2005-11-4
帖子
358
跳转到指定楼层
1
发表于 2008-2-24 05:11:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
比如,现在有A B C不在直线上的3点组成的面
需要RMXP来填充,我应该怎么做?

我是个脚本盲,根本对这个一巧不通。如果可能的话,最好有一个独立的小脚本就好了。

这个对于各位大大门来说很容易,但对我来说非常难,请大大门帮忙下好么?
此贴于 2008-3-3 0:06:48 被版主水迭澜提醒,请楼主看到后对本贴做出回应。


----------------版务----------------
如果问题未解决,请继续提问
如果问题已解决,请结贴
若到末贴发贴时间后一周仍未结贴
管理员会自动为你过期帖子、结贴或强行认可答案(好人卡-1)
原签名太大,被咔嚓了。重新换一个吧。by 管理员  [偶就不修改,你咬我啊~? :P]

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

2
发表于 2008-2-24 05:14:14 | 只看该作者

这个我去写个脚本好了-v-+好象满好玩~~
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-21
帖子
355
3
发表于 2008-2-24 05:14:51 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
4
发表于 2008-2-24 06:02:22 | 只看该作者
一个点一个点画?=。=

其实我都不知道怎么画直线……难道用很扁的四边形么?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

5
发表于 2008-2-24 06:03:47 | 只看该作者
扫描线填充
逐行或逐列扫描,与范围边界交替的奇数点为进点,偶数点为出点,然后以这两点为边界fill_rect即可,如果你给的是封闭区域,那么在已知宽高以后,这个算法的效率还是蛮高的,你如果整个屏幕扫的话,效率会很低
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

6
发表于 2008-2-24 06:03:57 | 只看该作者
算了,与楼上重复了。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
7
发表于 2008-2-24 06:09:25 | 只看该作者
以下引用亿万星辰于2008-2-23 22:03:47的发言:

扫描线填充
逐行或逐列扫描,与范围边界交替的奇数点为进点,偶数点为出点,然后以这两点为边界fill_rect即可,如果你给的是封闭区域,那么在已知宽高以后,这个算法的效率还是蛮高的,你如果整个屏幕扫的话,效率会很低


就是用fill_rect画直线咯……=。=那……height是不是就应该是1=。=

其实我倒想问……如果我要画的是一个方框,中间是透明的……
除了画一个大的框。再画一个透明的小框外,有更方便的方法没=。=
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

8
发表于 2008-2-24 06:13:39 | 只看该作者
以下引用幻の飞鱼于2008-2-23 22:09:25的发言:


以下引用亿万星辰于2008-2-23 22:03:47的发言:

扫描线填充
逐行或逐列扫描,与范围边界交替的奇数点为进点,偶数点为出点,然后以这两点为边界fill_rect即可,如果你给的是封闭区域,那么在已知宽高以后,这个算法的效率还是蛮高的,你如果整个屏幕扫的话,效率会很低



就是用fill_rect画直线咯……=。=那……height是不是就应该是1=。=

其实我倒想问……如果我要画的是一个方框,中间是透明的……
除了画一个大的框。再画一个透明的小框外,有更方便的方法没=。=


[本贴由作者于 2008-2-23 22:11:15 最后编辑]


若是不考虑工具的特殊性,应该是最简单的镂空了,另外我做窗体万花筒时,使用过扫描线算法。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
1 小时
注册时间
2005-11-4
帖子
358
9
 楼主| 发表于 2008-2-24 06:18:07 | 只看该作者
可以给一个通用脚本么?
比如密闭的话,只用输入3个点的X Y坐标和颜色就可以了的那种。
偶想做个真3D游戏来玩玩。(不要说效率,这个我有点子)
原签名太大,被咔嚓了。重新换一个吧。by 管理员  [偶就不修改,你咬我啊~? :P]
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

10
发表于 2008-2-24 06:58:47 | 只看该作者
def draw_triangle(x1,y1,x2,y2,x3,y3,color=Color.new(0,0,0,255))
  triangle=Sprite.new
  triangle.bitmap=Bitmap.new(640,480)
  x=0
  k1=(y2-y1)*1.0/(x2-x1)
  k2=(y3-y1)*1.0/(x3-x1)
  k3=(y3-y2)*1.0/(x3-x2)
  height=1
  for x in x1..x2
      y = (x-x1)*k1+y1 #求出点
      height = (x-x1)*k2+y1-y
      if height < 0
        y+=height
        height = 0 - height
      end
      triangle.bitmap.fill_rect(x, y, 1, height, color)
    end
    for x in x2..x3
      y = (x-x2)*k3+y2
      height = (x-x1)*k2+y1-y
      if height < 0
        y+=height
        height = 0 - height
      end
      triangle.bitmap.fill_rect(x, y, 1, height, color)
    end
end
大概是这样。
不过这个东西有点局限性,x1,x2,x3必须从小到大,y坐标则没所谓
LZ看懂的话就自己改吧=v=

P。S 我又犯了白痴错误……竟然用int来算斜率……orz|||
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-2 10:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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