繁体   English   中英

在libgdx中复制纹理

[英]Copy texture in libgdx

我在Renderer类中有2个Animation类对象,它有2个猴子动画文件:一个描绘了猴子前进而另一个描绘了右边。

现在,我正在尝试创建第三个动画对象,将猴子向左拉。

我试图翻转第二个动画的图像(猴子向右)并将它们添加到一个数组中,该数组最终将用作第三个对象的资源。

问题是当我翻转第二个动画的图像然后添加它们时,原始动画对象被“损坏”。 当我说损坏时,我的意思是包含右边猴子图像的动画突然也“向左翻转”,现在我有2个动画对象描述了向左走的猴子。

以下是处理它的代码部分:

monkeyAnimStraight = new Animation(1/20.0f, AssetsManager.getAsset("animations/monkeywalkaway.txt", TextureAtlas.class).getRegions());
        monkeyAnimStraight.setPlayMode(Animation.PlayMode.LOOP_REVERSED);
        monkeyAnimRight = new Animation(1/10.0f, AssetsManager.getAsset("animations/monkeywalk.txt", TextureAtlas.class).getRegions());
        monkeyAnimRight.setPlayMode(Animation.PlayMode.LOOP_REVERSED);
        Array<AtlasRegion> temp = AssetsManager.getAsset("animations/monkeywalk.txt", TextureAtlas.class).getRegions();
        Array<AtlasRegion> keyFramesTemp = new Array<TextureAtlas.AtlasRegion>();
        keyFramesTemp.addAll(temp);
        for(AtlasRegion keyFrame : keyFramesTemp) {
            keyFrame.flip(true, false);
        }
        monkeyAnimLeft = new Animation(1/20.0f, keyFramesTemp);

正如你所看到的,我正在尝试复制原始图像,这样它们就不会被翻转但仍然无效。

如何成功复制原始AtlasRegion阵列?

如果您不想弄乱原始纹理区域,则创建新纹理区域。 请注意,AtlasRegions是TextureRegions的子类,但您对动画真正需要的只是TextureRegions。

您需要复制它们并创建新的实例,而不是修改TextureRegions的原始实例。 简单地将它们放入新阵列中不会复制它们。 新数组仍引用相同的原始实例。

这样做:

Array<TextureRegion> monkeyWalkRightRegions = AssetsManager.getAsset("animations/monkeywalk.txt", TextureAtlas.class).getRegions();
monkeyAnimRight = new Animation(1/10.0f, monkeyWalkRightRegions);
monkeyAnimRight.setPlayMode(Animation.PlayMode.LOOP_REVERSED);

Array<TextureRegion> monkeyWalkLeftRegions = new Array<TextureRegion>();

//copy and then flip each region and add it to the new array
for(TextureRegion keyFrame : monkeyWalkRightRegions ) {
    TextureRegion region = new TextureRegion(keyFrame); //copy of region created
    region.flip(true, false);
    monkeyWalkLeftRegions.add(region);
}

monkeyAnimLeft = new Animation(1/20.0f, monkeyWalkLeftRegions );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM