2017-01-11 31 views
2

我有一个精灵图像的纹理,看起来像这样:Kirby RunlibGDX动画效果纹理区域

而且我想制作动画。我有这样的代码设置到每个帧存储到一个变量TextureRegion然后存储所有的帧转换为动画TextureRegion阵列

//AssetLoader class 
runTexture = new Texture("kirbyrun.png"); 
runTexture.setFilter(TextureFilter.Nearest,TextureFilter.Nearest); 

//Run Hiro 
hiro1 = new TextureRegion(runTexture,0,55,37,55); 
hiro1.flip(false,true); 
hiro2 = new TextureRegion(runTexture,37,55,44,55); 
hiro2.flip(false,true); 
hiro3 = new TextureRegion(runTexture,81,55,44,55); 
hiro3.flip(false,true); 
hiro4 = new TextureRegion(runTexture,129,55,46,55); 
hiro4.flip(false,true); 
hiro5 = new TextureRegion(runTexture,176,55,41,55); 
hiro5.flip(false,true); 
hiro6 = new TextureRegion(runTexture,216,55,41,55); 
hiro6.flip(false,true); 
hiro7 = new TextureRegion(runTexture,257,55,41,55); 
hiro7.flip(false,true); 
hiro8 = new TextureRegion(runTexture,301,55,42,55); 
hiro8.flip(false,true); 

TextureRegion[] run = {hiro1,hiro2,hiro3,hiro4,hiro5,hiro6,hiro7,hiro8}; 
hiroRunAnimation = new Animation<TextureRegion>(0.5f,run); 
hiroRunAnimation.setPlayMode(Animation.PlayMode.LOOP); 

我当前使用yDown坐标系这就是为什么我翻转图像。

TextureRegion currentFrame = AssetLoader.hiroRunAnimation.getKeyFrame(runTime); 

sb.begin(); 

sb.draw(currentFrame,player.getX(),player.getY(),player.getWidth(),player.getHeight()); 
sb.end(); 

这只是块而不是科比的图片打开:

试图呈现这一点使用此代码后 enter image description here

很明显我做错了什么,我米猜测它与我的TextureRegion部分,也许我的X,Y坐标或错误,但我不知道如何解决此问题,因为我使用spritecow.com获取这些坐标。我假设左上角是(0,0),正Y意味着向下移动图像。我怎样才能使柯比实际出现而不是这些盒子?或者更容易将每个帧图像分离成单独的.png文件,只需使用Texture而不是TextureRegion,因此我不需要指定明确的区域。那么我可以使用动画或不会工作?

+0

你的spritesheet上有那些黑盒子吗? – eldo

回答

1

黑盒子是因为你错误地定义了区域位置。你从y = 55开始所有区域,因为纹理从y = 0开始,这是不正确的。 你也翻转纹理,这是使它们颠倒显示,所以删除翻转以及。 您似乎也错误地确定了某些区域的区域大小,因此您应该仔细检查它们。

您的代码应该是这样的:

// Note the third value have changed to zeroes and the flipping has been removed. 
hiro1 = new TextureRegion(runTexture,0,0,37,55); 
hiro2 = new TextureRegion(runTexture,37,0,44,55); 
hiro3 = new TextureRegion(runTexture,81,0,44,55); 
hiro4 = new TextureRegion(runTexture,129,0,46,55); 
hiro5 = new TextureRegion(runTexture,176,0,41,55); 
hiro6 = new TextureRegion(runTexture,216,0,41,55); 
hiro7 = new TextureRegion(runTexture,257,0,41,55); 
hiro8 = new TextureRegion(runTexture,301,0,42,55); 

这样做的结果之后是这样的:

enter image description here

+0

你怎么能得到每个精灵的确切坐标? –

+0

我没有改变坐标(x,宽度,高度),我只是改变了开始的y位置。 – Charanor

3

我是看它的权利,你“硬编码”的协调了精灵?这不是一个好主意,libGDX有一个更好的解决方法:Texture Packer

基本上,你要做的是将单个精灵放到一个文件夹中运行纹理打包器脚本来合并它们。你还将得到一个带有精灵坐标的json文件。您可以使用资产管理器轻松加载它们。我在这里创建了一个例子:https://gist.github.com/reime005/87e1ed30548be31a632292a604f397ef