lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: donnier
打印 上一主题 下一主题

bitmapdata.draw的问题

[复制链接]

9

主题

0

好友

117

积分

士兵

Rank: 1

跳转到指定楼层
楼主
发表于 2016-12-6 13:55:00 |显示全部楼层 |倒序浏览
本帖最后由 donnier 于 2016-12-6 14:02 编辑

先贴源码
<script>
var imgBitmapdata = null,
imgBitmap = null;
function main() {
    LGlobal.setDebug(true);
    var loader = new LLoader();
    loader.addEventListener(LEvent.COMPLETE, function(event) {
        imgBitmapdata = new LBitmapData(event.target);
        imgBitmap = new LBitmap(imgBitmapdata);
        test();
    });
    loader.load('http://192.168.1.88/test.jpg', 'bitmapData');

}
function test() {
    var bg = new LShape();
    bg.graphics.drawRect(0, '#000000', [0, 0, 1200, 1200], true, '#ff0000');
    addChild(bg);

    var s1 = new LSprite();
    var shape = new LShape();
    shape.graphics.drawRect(0, '#000000', [0, 0, 300, 300], true, '#000000');
    shape.alpha = 0;
    s1.addChild(shape);

    s1.graphics.clear();
    s1.graphics.beginBitmapFill(imgBitmapdata);
    s1.graphics.drawTriangles([0, 0, 0, 300, 300, -100, 300, 300], [0, 2, 1, 2, 1, 3], [0, 0, 0, 1, 1, 0, 1, 1]);


    var bitmapdata2 = new LBitmapData(null, 0, 0, 200, 200, LBitmapData.DATA_CANVAS);
    var matrix = new LMatrix();
    matrix.translate(20, 20);
    bitmapdata2.draw(s1, matrix);
    var bitmap2 = new LBitmap(bitmapdata2);

    var clone = s1.clone();
    clone.x = 400;
    clone.y = 400;
    addChild(clone);
    trace(clone.getWidth())
    trace(clone.getHeight())

    var s3 = new LSprite();
    s3.addChild(bitmap2);
    addChild(s3);


}
init(50, 'canvas1', 1200, 1200, main);
</script>
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

沙发
发表于 2016-12-6 14:01:50 |显示全部楼层
下面是运行效果

QQ图片20161206143312.png
我想得到的结果是,第一张图片呈现下面的效果,就是蓝色框内的东西也显示出来, 不知道怎么弄,请大神帮忙
QQ图片20161206143546.png
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

板凳
发表于 2016-12-6 14:15:02 |显示全部楼层
你好,我不是想问扭曲是什么原理或者怎么实现,现在是我有一个隐藏层s1,对其扭曲后,如果直接显示s1是没问题,但是bitmapdata.draw绘制到另外一个层里面, 超出s1的宽高的部分不显示
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

地板
发表于 2016-12-6 14:45:01 |显示全部楼层
本帖最后由 donnier 于 2016-12-6 14:55 编辑

不行,效果还是没有区别,我把开始那个代码加了下注释,这样好看点

<script>
var imgBitmapdata = null,
imgBitmap = null;

function main() {
    LGlobal.setDebug(true);
    var loader = new LLoader();
    loader.addEventListener(LEvent.COMPLETE, function(event) {
        imgBitmapdata = new LBitmapData(event.target);
        imgBitmap = new LBitmap(imgBitmapdata);
        test();
    });
    loader.load('http://192.168.1.88/test.jpg', 'bitmapData');

}

function test() {
    //创建红色背景
    var bg = new LShape();
    bg.graphics.drawRect(0, '#000000', [0, 0, 1200, 1200], true, '#ff0000');
    addChild(bg);

    //创建s1层
    var s1 = new LSprite();
    var shape = new LShape();
    shape.graphics.drawRect(0, '#000000', [0, 0, 300, 300], true, '#000000');
    shape.alpha = 0;
    s1.addChild(shape);

    //开始扭曲
    s1.graphics.clear();
    s1.graphics.beginBitmapFill(imgBitmapdata);
    s1.graphics.drawTriangles([0, 0, 0, 300, 300, -100, 300, 300], [0, 2, 1, 2, 1, 3], [0, 0, 0, 1, 1, 0, 1, 1]);

    //绘制到一个bitmapdata并加入舞台
    var bitmapdata2 = new LBitmapData(null, 0, 0, 200, 200, LBitmapData.DATA_CANVAS);
    var matrix = new LMatrix();
    matrix.translate(20, 20);
    bitmapdata2.draw(s1, matrix);
    var bitmap2 = new LBitmap(bitmapdata2);

    var s3 = new LSprite();
    s3.addChild(bitmap2);
    addChild(s3);

    //s1扭曲后直接显示的效果
    var clone = s1.clone();
    clone.x = 400;
    clone.y = 400;
    addChild(clone);


}
init(50, 'canvas1', 1200, 1200, main);
</script>
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

5#
发表于 2016-12-6 14:46:17 |显示全部楼层
本帖最后由 donnier 于 2016-12-6 14:56 编辑

以上是加了注释的代码
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

6#
发表于 2016-12-6 15:33:02 |显示全部楼层
没有写反,我试了,不行,就改回来了,你教我的应该是下面这样对吧
<script>
var imgBitmapdata = null,
imgBitmap = null;

function main() {
        LGlobal.setDebug(true);
        var loader = new LLoader();
        loader.addEventListener(LEvent.COMPLETE, function(event) {
                imgBitmapdata = new LBitmapData(event.target);
                imgBitmap = new LBitmap(imgBitmapdata);
                test();
        });
        loader.load('http://192.168.1.88/test.jpg', 'bitmapData');

}

function test() {
        //创建红色背景
        var bg = new LShape();
        bg.graphics.drawRect(0, '#000000', [0, 0, 1200, 1200], true, '#ff0000');
        addChild(bg);

        //创建s1层
        var s1 = new LSprite();
        var shape = new LShape();
        shape.graphics.drawRect(0, '#000000', [0, 0, 300, 300], true, '#000000');
        shape.alpha = 0;
        s1.addChild(shape);

        //开始扭曲
        s1.graphics.clear();
        s1.graphics.beginBitmapFill(imgBitmapdata);
        s1.graphics.drawTriangles([0, 0, 0, 300, 300, -100, 300, 300], [0, 2, 1, 2, 1, 3], [0, 0, 0, 1, 1, 0, 1, 1]);

        //绘制到一个bitmapdata并加入舞台
        var bitmapdata2 = new LBitmapData(null, 0, 0, 200, 200, LBitmapData.DATA_CANVAS);
        var matrix = new LMatrix();
        matrix.translate(20, 20);
        var layer=new LSprite();
        layer.graphics.drawRect(0, "#000000", [0, 0, 300, 400]);
        layer.addChild(s1);
        bitmapdata2.draw(layer, matrix);
        var bitmap2 = new LBitmap(bitmapdata2);

        var s3 = new LSprite();
        s3.addChild(bitmap2);
        addChild(s3);

        //s1扭曲后直接显示的效果
        var clone = s1.clone();
        clone.x = 400;
        clone.y = 400;
        addChild(clone);


}
init(50, 'canvas1', 1200, 1200, main);
</script>
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

7#
发表于 2016-12-8 14:18:13 |显示全部楼层
大神威武!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-30 09:21 , Processed in 0.052138 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部