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

Project1

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

[已经解决] 水平斜切的效果

[复制链接]

Lv2.观梦者

梦石
0
星屑
555
在线时间
111 小时
注册时间
2013-11-22
帖子
301
跳转到指定楼层
1
发表于 2014-7-30 14:26:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
各位,流年酱想问大家一个问题
怎样做到类似PS中的水平斜切的效果
就像下图一样,谢谢大家了

点评

没见过该功能。可以试试旋转。  发表于 2014-7-30 14:49

Lv1.梦旅人

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
帖子
1524
来自 4楼
发表于 2014-7-30 18:02:38 | 只看该作者
本帖最后由 克莉丝 于 2014-7-30 18:12 编辑

使用方法
精灵对象.bev(斜切角度,斜切起始边) #起始边可以省略,省略时默认为下边
精灵对象.apply_bitmap                      #把当前的位图作为源位图,如果不打算二次斜切可以不使用

原图


斜切30°


二次斜切30°


进行第二次斜切时如果之前未调用   精灵对象.apply_bitmap
那么会重新进行斜切而不是在上一次斜切的基础上进行斜切


@ban     @bitmap     拖出去tjjlb
RUBY 代码复制
  1. class Sprite
  2.   alias bitmap_crysse bitmap=
  3.   def bitmap=(b)
  4.     (@ban= false;@resbitmap = b) if not @ban
  5.     bitmap_crysse(b)
  6.   end
  7.   def apply_bitmap
  8.     @resbitmap = self.bitmap
  9.   end
  10.   def bev(a,d = 2) # 1:上 2:下 3:左 4:右
  11.     a = [[-90,a].max,90].min
  12.     (return;self.bitmap.clear) if a.abs == 90
  13.     k = Math.tan(a/57.3)
  14.     c = @resbitmap.height
  15.     w = @resbitmap.width
  16.     if d<3
  17.       nw = c * k + w
  18.       @ban = true
  19.       self.bitmap = Bitmap.new(nw,c)
  20.       if  d == 1
  21.         c.times{|y|
  22.           self.bitmap.blt(y*k,y,@resbitmap,Rect.new(0,y,w,1))
  23.         }
  24.       else
  25.         c.times{|y|
  26.           self.bitmap.blt(y*k,c-y,@resbitmap,Rect.new(0,c-y,w,1))
  27.         }
  28.       end
  29.     elsif d>2
  30.       nh = w * k + c
  31.       @ban = true
  32.       self.bitmap = Bitmap.new(w,nh)
  33.       if  d == 3
  34.         w.times{|x|
  35.           self.bitmap.blt(x,x*k,@resbitmap,Rect.new(x,0,1,c))
  36.         }
  37.       else
  38.         w.times{|x|
  39.           self.bitmap.blt(w-x,x*k,@resbitmap,Rect.new(w-x,0,1,c))
  40.         }
  41.       end
  42.     end
  43.   end
  44. end
  45.  
  46. # 测试代码
  47. s = Sprite.new                                     # 精灵
  48. s.bitmap = Bitmap.new(32,32)                       # 创建位图
  49. s.bitmap.fill_rect(0,0,32,32,Color.new(255,0,0))   # 填充矩形
  50. a = 30                                             # 设置斜切角度
  51. s.bev(a,4)                                         # 以设定的角度,右边为起始进行斜切
  52. s.apply_bitmap                                     # 替换内部存储的位图以供二次切帖
  53. s.bev(a,2)                                         # 以设定的角度,下边为起始进行斜切
  54. loop{Graphics.update}                              # 返回结果
   

点评

(return;self.bitmap.clear) if a.abs == 90 不应该要分号吧…………  发表于 2014-7-30 20:22
有一只吃流浪者的妖怪  发表于 2014-7-30 19:59
其实不难啦~ 忘了dispose差评  发表于 2014-7-30 19:57
谢谢~  发表于 2014-7-30 19:30
断然被吓到了==  发表于 2014-7-30 19:26

评分

参与人数 3星屑 +2 梦石 +1 收起 理由
RyanBern + 1 认可答案,我也给个+1,不过是好人卡+1.
satgo1546 + 1
kuerlulu + 1 大触饶命

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
2
发表于 2014-7-30 16:53:29 | 只看该作者
将图像中的每行向右移动(行数-当前行数)/比例系数像素差不多就能得到这个效果了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1256
在线时间
6552 小时
注册时间
2010-12-30
帖子
8949
3
发表于 2014-7-30 17:56:40 | 只看该作者
(っ´ω`c)不是直接开PS点斜切就好了吗……那张例图明显也是软件自动处理的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-28 10:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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