赞 | 0 |
VIP | 17 |
好人卡 | 4 |
积分 | 1 |
经验 | 1035 |
最后登录 | 2014-2-21 |
在线时间 | 151 小时 |
Lv1.梦旅人 百合乡の蕾咪
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 151 小时
- 注册时间
- 2011-1-12
- 帖子
- 198
|
具有 ox oy 属性的类共有三个, 分别是 Viewport, Sprite 和 Plane . 不过三者的用法都是一样的.
如果说把 x, y 这两个坐标看成是相对于窗口来说的话, ox, oy 这两个就是相对于图片上的坐标来说的. 这就意味着, (x, y) 这个坐标系的坐标原点在于窗口的最左上. 而 (ox, oy) 的坐标系原点在于图片的最右上. 两者是不一样的. (ox, oy) 不是对于窗口而言的.
两个的另一个区别在于, (x, y) 的值决定了这个类(Viewport, Sprite 和 Plane 中的某个)在窗口上的显示位置, 也就是显示坐标. 而 (ox, oy) 的含义是需要显示的图片部分的起始坐标. 但是两者的显示区域的定义都是相同的, 都是由 Viewport 的 Width 和 Height 来决定.
(ox, oy) 坐标的两一个作用是定义这个精灵(Sprite类) 在旋转时所绕的点.
-----------------------------------------------------------------------------------------
(ox, oy) 坐标的用法, 和 Bitmap 的 blt 是一样的, 在一定程度上两者等价(不讨论效率) 比如:
- window = Window_Base.new(0, 0, 400, 400) # 建立一个坐标在 (0, 0) 的 宽高都是 400px 的窗口
- window.back_opacity = 0 # 取消窗口背景
- bitmap = Bitmap.new("1.jpg") # 加载 1.jpg 这张图片
- rect = Rect.new(30, 40, 300, 300) # 定义一个矩形, 用于指明后面需要截取的图片区域
- window.contents.blt(10, 20, bitmap, rect, 150) # 在相对于窗口的左上角为原点的坐标系的 (10, 20) 位置, 显示 1.jpg 这
- # 张图片的(30, 40) 这个相对于图片的左上角, 宽高都是 300px 的区域.
复制代码 与这个功能类似的 Sprite 的写法是:
- viewport = Viewport.new(0, 0, 300, 300)
- sprite = Sprite.new(viewport)
- sprite.bitmap = Bitmap.new("1.jpg")
- sprite.ox = 30
- sprite.oy = 40
- sprite.opacity = 150
复制代码 当然 Sprite 的 src_rect 属性也是可以使用的.
注意一下: 下面的这个脚本虽然在这里和上面的脚本显示的情况是一样的, 但是这里有一个区别.- viewport = Viewport.new(0, 0, 300, 300)
- sprite = Sprite.new(viewport)
- sprite.bitmap = Bitmap.new("1.jpg")
- sprite.x = -30
- sprite.y = -40
- sprite.opacity = 150
复制代码 如果在这两个脚本的最后一句添加也就是旋转的话, 就可以看出区别了. 前一个的旋转点就是我们定义的 (30, 40) 位置, 也就是 (ox, oy) .
后一个虽然在没有旋转之前是正常的, 但是在旋转之后就不一样了. 理由在于, 后一个仅仅是定义了一个 (x, y) . (ox, oy) 依旧是默认的 ( 0, 0 ), 也就是图片的左上角. 两者的旋转点式不一样的. |
评分
-
查看全部评分
|