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

Project1

 找回密码
 注册会员
搜索

水平斜切的效果

查看数: 1946 | 评论数: 3 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-7-30 14:26

正文摘要:

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

回复

克莉丝 发表于 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 大触饶命

查看全部评分

MeowSnow 发表于 2014-7-30 17:56:40
(っ´ω`c)不是直接开PS点斜切就好了吗……那张例图明显也是软件自动处理的。
satgo1546 发表于 2014-7-30 16:53:29
将图像中的每行向右移动(行数-当前行数)/比例系数像素差不多就能得到这个效果了。
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-28 15:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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