我的Renderer类中有2个Animation类对象,它有2个猴子动画文件:一个描绘了猴子前进而另一个描绘了右边。
现在,我正在尝试创建第三个动画对象,将猴子拉向左边。
我试图翻转第二个动画的图像(猴子向右)并将它们添加到最终将用作第三个对象的资源的数组中。
问题是当我翻转第二个动画的图像然后添加它们时,原始动画对象被损坏了#34;。当我说损坏时,我的意思是包含右边猴子图像的动画也突然出现了#34;翻转"在左边,现在我有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阵列?
答案 0 :(得分:3)
如果您不想弄乱原始纹理区域,请创建新纹理区域。请注意,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 );