您的位置:首页 > 其它

libgdx骨骼动画例子

2015-08-28 10:58 417 查看
package jaze.gdx;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Polygon;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.utils.viewport.StretchViewport;

/**
* 测试骨骼动画的外边框和原点的位置
*
* @author Administrator
*
*/
public class SkelPosTest extends ApplicationAdapter {
public static Stage stage;
SkelActor actor;
ShapeRenderer shapes;
private Label showLabel;

public void create() {

shapes = new ShapeRenderer();
shapes.setAutoShapeType(true);

stage = new Stage(new StretchViewport(960, 540));
actor = new SkelActor();
stage.addActor(actor);

showLabel = new Label("", new Label.LabelStyle(new BitmapFont(), Color.WHITE));
showLabel.setPosition(0, 30);
stage.addActor(showLabel);

Gdx.input.setInputProcessor(stage);
actor.addListener(new InputListener(){

public boolean mouseMoved(InputEvent event, float x, float y) {
showLabel.setText("x="+(x)+"   y="+(y));
return true;
}

public void exit(InputEvent event, float x, float y, int pointer,
Actor toActor) {
showLabel.setText("");
}
});
}

public void render() {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();

shapes.setProjectionMatrix(stage.getCamera().combined);
shapes.begin(ShapeType.Line);
shapes.setColor(Color.GREEN);
shapes.rect(actor.getX(), actor.getY(), actor.getWidth(),
actor.getHeight());

shapes.setColor(Color.RED);
shapes.polygon(actor.getHeroPolygon().getTransformedVertices());

shapes.setColor(Color.GREEN);
shapes.set(ShapeType.Filled);
shapes.ellipse(actor.skeleton.getX()
+ actor.skeleton.getRootBone().getX(), actor.skeleton.getY()
+ actor.skeleton.getRootBone().getY(), 5, 5);

shapes.end();
}

class SkelActor extends SkeletonActor {
private Polygon heroPolygon;

public SkelActor() {
super("player_0.atlas", "player_0.json");                         //1,要加载的动画资源

heroPolygon = new Polygon();
setPosition(300, 100);

skeleton.setBonesToSetupPose();// 重置为初始位置
animationState.setAnimation(0, "player_0_siwang", true);           //2,要播放的动画名字
setSize(100, 130);                                                 //3,精灵大小
widthOffset = 40;                                                  //4,中心点偏移宽度
heightOffset = 40;                                                 //5,中心点偏移高度
//			float speedX=15*MathUtils.cos((-36)*MathUtils.degreesToRadians);
//			float speedY=15*MathUtils.sin((-36)*MathUtils.degreesToRadians);
//			System.err.println(speedX+"  "+speedY);
heroPolygon.setVertices(new float[] {10,0,80,0,80,100,5,110});     //6,碰撞矩形
}

public void act(float delta) {
super.act(delta);
heroPolygon.setPosition(getX(), getY());
}

public Polygon getPolygon() {
return heroPolygon;
}

public Polygon getHeroPolygon() {
return heroPolygon;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: