81 123
发新话题
打印

[分享] 分享一个图象变形类(Skew),,位图梯形化[080819]

分享一个图象变形类(Skew),,位图梯形化[080819]

类代码源自国外一站,站点不记得了.....

先分享下吧,用起来也蛮方便的,可以达到4点控制一张位图

使用方法:

var skew:Skew = new Skew(imageBoard, "Image", 5, 5);//参数分别是一图象容器MC,位图的库中连接名,横向切割刀数,纵向切割刀数(象切西瓜...)

skew.setTransform(x0,y0,x1,y1,x2,y2,x3,y3)//分别为位图四个顶点的坐标设置,4点确定一位图,所以这里可以设置成梯形

效果:





文件和源文件在附件中~

PS:这里通过Matrix,只是近似模拟出效果,有的位置出的效果也不是很理想,想很理想,还得另寻它法~



更新下Skew的AS 3.0版,其实就几个地方变动一下就能照样使用啦~

public class test extends Sprite {

  public function test() {
   var sk : Skew = new Skew(this, "Image", 5, 5);//第二个参数为库中图片绑定的类名
   sk.setTransform(100, 100, 200, 70, 220, 200, 80, 210);
  }
}

注:080819更新



[ 本帖最后由 ycccc8202 于 2008-8-19 16:07 编辑 ]

附件

skew.jpg (21.69 KB)

2007-8-1 01:39

skew.jpg

Matrix_Skew.swf (27.18 KB)

2007-8-1 01:39, 下载次数: 632

skew.rar (60.97 KB)

2007-8-1 01:39, 下载次数: 1231

Skew_3.0.rar (1.57 KB)

2008-8-19 16:01, 下载次数: 38

寻觅终生伴侣!

my blog

TOP

UP!!

呵呵,好东东,收藏!!

谢谢版主!!

TOP

谢谢

TOP

不错不错,很好

TOP

回复 #1 ycccc8202 的帖子

这是我一直想要的!!!谢啦

TOP

引用:
原帖由 JavaCS3 于 2007-8-1 12:20 发表
这是我一直想要的!!!谢啦
LS为这个事儿确实折腾了一阵子,呵呵!

TOP

恩,以后咱们就直接拿来用

灰常灰常方便!
寻觅终生伴侣!

my blog

TOP

引用:
原帖由 ycccc8202 于 2007-8-1 12:30 发表
恩,以后咱们就直接拿来用

灰常灰常方便!
嘿嘿,那是!!
以后就跟版主混了,嘿嘿,捡好东西

TOP

真的不错,好东西,谢谢了

TOP

不错
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

这是flash 3d引擎有关图形扭曲的distortimage类

TOP

妙,这正是我想要的,做电子相册不用愁了!
不知什么时候,开始和你在梦里头接触……

TOP

好!!!!

TOP

TOP

TOP

TOP

TOP

这撕病了

TOP

有点讨厌那个人,有点问题一样。

TOP

在去年就看过啦,哈哈...


http://www.nikemode.com/blog/article.asp?id=255
lbynet
http://www.52hai.com/User0/140/

TOP

很方便的咚咚

TOP

好东西。感谢斑竹
奇怪阿多比为什么不解决这个问题,要是做成常用工具多好。
看帖回帖是基本道德

TOP

这个能否做成自动扭曲(随意变形),也就是一加载就onEnterFrame自动变化形状。会不会卡?支不支持大图片?

TOP

精确度要求低点就不怎么卡,宽高别超过2880,应该都行
寻觅终生伴侣!

my blog

TOP

那如果用你这个改成自动变化形状的应该怎么改?另外精度又在哪设置?

import com.ycccc.MovieClip.Skew;
var imageBoard:MovieClip = createEmptyMovieClip("imageBoard", dot0.getDepth()-4);
var skew:Skew = new Skew(imageBoard, "Image", 5, 5);
//精度越大效果越好,但不能太大会死机哦~,我这里设置了不能超过20
var w:Number = imageBoard._width;
var h:Number = imageBoard._height;
var sx:Number = 30;
var sy:Number = 30;
var interval:Number;
dotSet();
function dotSet() {
        var p:Array = [[0, 0], [w, 0], [w, h], [0, h]];
        for (var j = 0; j<4; j++) {
                this["dot"+j]._x = sx+p[j][0];
                this["dot"+j]._y = sy+p[j][1];
                this["dot"+j].onPress = function() {
                        this.startDrag();
                        interval = setInterval(this._parent, "flush", 10);
                };
                this["dot"+j].onRelease = this["dot"+j].onReleaseOutside=function () {
                        this.stopDrag();
                        clearInterval(interval);
                };
        }
        skew.setTransform(dot0._x, dot0._y, dot1._x, dot1._y, dot2._x, dot2._y, dot3._x, dot3._y);
}
function flush() {
        updateAfterEvent();
        skew.setTransform(dot0._x, dot0._y, dot1._x, dot1._y, dot2._x, dot2._y, dot3._x, dot3._y);
}

TOP

试了下这算法效率挺高的,可以调整清晰度来减少运算量,合理运用这点用来做动画可以达到比较理想的效果...可惜暂时还没完全看懂代码....继续努力~~~

TOP

嗯!我也试着去改动代码来达到我想要的效果,可惜本人技术有限,没有成功。

TOP

skew.setTransform(x0,y0,x1,y1,x2,y2,x3,y3)

//自动设置4个点的位置不就达到自动变化的效果了,不断调用这个方法就行了
寻觅终生伴侣!

my blog

TOP

我试着用春叶飘零版主的方法实现了自动变化,但是为什么播放后速度越来越慢,越来越卡?

function dotSet() {
        var p:Array = [[0, 0], [w, 0], [w, h], [0, h]];
        for (var j = 0; j<4; j++) {
                this["dot"+j]._x = sx+p[j][0];
                this["dot"+j]._y = sy+p[j][1];
                dot0._x = dot0._y=100;
                dot0.onEnterFrame = function() {
                        if (dot0._x<200) {
                                dot0._x += 2;
                                dot0._y += 2;
                                interval = setInterval(this._parent, "flush", 10);
                        } else {
                                clearInterval(interval);
                        }
                };
        }
        skew.setTransform(dot0._x, dot0._y, dot1._x, dot1._y, dot2._x, dot2._y, dot3._x, dot3._y);
}
function flush() {
        updateAfterEvent();
        skew.setTransform(dot0._x, dot0._y, dot1._x, dot1._y, dot2._x, dot2._y, dot3._x, dot3._y);
}