Android Libgdx时间延迟和增量值问题(与脊椎一起使用以运行骨架动画)
我使用Libgdx框架和Spine,使用Atlas和导出的Json文件制作骨架动画。文件中有许多动画。我能够从json文件加载动画。但有两个问题:Android Libgdx时间延迟和增量值问题(与脊椎一起使用以运行骨架动画),android,libgdx,Android,Libgdx,我使用Libgdx框架和Spine,使用Atlas和导出的Json文件制作骨架动画。文件中有许多动画。我能够从json文件加载动画。但有两个问题: 动画开始时的延迟:动画开始前有3-4秒的延迟。我看到一个黑屏,然后动画开始工作 增量-我对增量时间有一些问题。只有一些动画从默认增量值运行,但是如果我更改(增量或减少增量值),不同的动画会给出不同的结果 不知道该怎么办?我已经在网上彻底搜索过了,但还没有找到解决办法 我在下面发布我的代码: 这是我的主课 public class AndroidLau
public class AndroidLauncher extends AndroidApplication
{
SpriteBatch batch;
Texture img;
ShapeRenderer renderer;
TextureAtlas atlas;
Skeleton skeleton;
Animation animation;
float time;
Bone root;
float x,y;
View spine_view;
private Screen curScreen; // the current screen
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
//initialize(new Main(20), config);
spine_view=initializeForView(new ApplicationListener()
{
@Override
public void resume()
{
curScreen.resume();
}
@Override
public void resize(int width, int height)
{
}
@Override
public void render()
{
curScreen.render((Gdx.graphics.getDeltaTime()/(1.5f))); //call the rendermethod with the delta time as parameter
}
@Override
public void pause()
{
curScreen.pause();
}
@Override
public void dispose()
{
curScreen.dispose();
}
@Override
public void create()
{
Gdx.graphics.getWidth();
Gdx.graphics.getHeight();
Firstscreen temp = new Firstscreen();//just an example of the first screen to load up
setScreen(temp);
}
}, config);
LinearLayout l1 = (LinearLayout) findViewById(R.id.container);
l1.addView(spine_view);
}
public void setScreen(Screen s) {
if (curScreen != null) {
curScreen.hide();
curScreen.dispose();
}
curScreen = s;
curScreen.show();
}
}
这是屏幕Iam渲染
public class Firstscreen implements Screen
{
SpriteBatch batch;
Texture img;
ShapeRenderer renderer;
TextureAtlas atlas;
Skeleton skeleton;
Animation animation;
float time;
Bone root;
float x,y;
int count =0;
@Override
public void render(float delta)
{
// track
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
time += delta;
animation.apply(skeleton,delta,time, false, null);
SkeletonRenderer render = new SkeletonRenderer();
batch.begin();
render.draw(batch, skeleton);
skeleton.updateWorldTransform();
batch.end();
}
@Override
public void resize(int width, int height)
{
}
@Override
public void show()
{
batch = new SpriteBatch();
renderer = new ShapeRenderer();
atlas = new TextureAtlas(Gdx.files.internal("abc.atlas"));
SkeletonJson json = new SkeletonJson(atlas);
// set the scale of skeleton
json.setScale(0.3f);
SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("skeleton.json"));
skeleton = new Skeleton(skeletonData);
skeleton.setToSetupPose();
skeleton.setSkin("Carla");
// set the position of the skeleton to render( here middle)
skeleton.setPosition((Gdx.graphics.getWidth()/2)-(x/2),( Gdx.graphics.getHeight()/2)-(y/2));
//animation = skeletonData.findAnimation("KID-LEVEL 2 - Couch potato");
animation = skeletonData.findAnimation("LEVEL 91- Around a world");
//animation = skeletonData.findAnimation("KID-LEVEL 7 - Super Hero");
}
@Override
public void hide()
{
}
@Override
public void pause()
{
}
@Override
public void resume()
{
}
@Override
public void dispose()
{
batch.dispose();
}
}
这是因为您正在手动管理时间线 改用
AnimationState
:
Skeleton skeleton = new Skeleton(skeletonData);
// sctruct for mix animations
AnimationStateData stateData = new AnimationStateData(skeletonData);
// and state
AnimationState state = new AnimationState(stateData);
在某些update
方法(或render
,如果您更喜欢在渲染时更新)中,可以调用以下命令:
state.update(delta);
在实际的渲染方法中:
// apply the state to skeleton
state.apply(skeleton);
// update transformations
skeleton.updateWorldTransform();
// draw then
render.draw(batch, skeleton);
因此,AnimationState
并非仅用于管理增量,您可以使用它播放和混合动画:
state.setAnimation(0, "LEVEL 91- Around a world", isLoop);
要更改动画速度,请使用setTimeScale
:
state.setTimeScale(0.5f); // set any time scale you want
另外,由于在render
方法中调用newskeletonrenderer()
,您可能会遇到一些性能问题。要解决这个问题,请将此代码移到构造函数。我不确定这是否有帮助,但这就是我在LibGDX中跟踪时间的方式:我的场景非常不同。。我有一些预先加载的json动画。。。感谢您的评论我还没有将Spine与libgdx一起使用,但是从Animation类的文档来看,您似乎使用了错误的一行:Animation.apply(skeleton,delta,time,false,null)代码>。第二个参数应该是最后传入的时间,而不是增量时间,因此使用animation.apply(skeleton,time delta,time,false,null)代码>改为。@Tenfour04。。我试过你的方法。。但我还是得到了同样的结果。。开始时出现延迟和不正确的动画。谢谢你的建议。