gpt4 book ai didi

java - 使用 TextureRegion (LibGDX) 在 Java 中绘制部分 Sprite

转载 作者:行者123 更新时间:2023-11-30 00:30:11 25 4
gpt4 key购买 nike

我目前有我的主角“学生”的类(class),除了左右移动外,它没有任何行为。我设法做到了,所以我的 spritesheet 的所有帧都会渲染,所以当我按下左/右键时,我需要帮助绘制前 3 帧(这是步行周期)。这是 Sprite 表:http://imgur.com/a/HHdm9

编辑:AND 第 2 行和第 3 行时按向上键和向下键。

学生类

    public class Student {

private Texture player;
private Animation<TextureRegion> playerAnimation;
private int pX;
private int pY;
private SpriteBatch batch;
private int HP;

public Student(float speed, int x, int y){
player = new Texture("student.png");
TextureRegion[][] tmp= TextureRegion.split(player,450/3,450/3);
TextureRegion[] character = new TextureRegion[9];
int index = 0;
for(int i=0; i <3; i++){
for(int j=0; j < 3; j++){
character[index++] = tmp[i][j];}
}

playerAnimation = new Animation<TextureRegion>(speed,character);
pX=x;
pY=y;
}

public SpriteBatch getBatch() {
return batch;
}

public void setBatch(SpriteBatch batch) {
this.batch = batch;
}

public void goLeft(){
pX-=5;
if(pX < -10){
pX = -10;
}
}

public void goRight(){
pX+=5;
}

public void renderStudent(float stateTime){
TextureRegion currentFrame = playerAnimation.getKeyFrame(stateTime,true);
batch.draw(currentFrame, (float) pX, (float) pY, 0, 0, currentFrame.getRegionWidth(),
currentFrame.getRegionHeight(),1.5f,1.5f,0);
}

public void dispose(){
player.dispose();
}
}

主类

    public class HaxMain extends ApplicationAdapter {
SpriteBatch batch;
Texture bg;

float stateTime;

private Student student1;
private Guard mguard, fguard;
private Admin madmin, fadmin;

@Override
public void create () {
batch = new SpriteBatch();
bg = new Texture("Level1.png");

student1 = new Student(.5f, 100, 0);
student1.setBatch(batch);
}

@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

stateTime += Gdx.graphics.getDeltaTime();

if(Gdx.input.isKeyPressed(Input.Keys.LEFT)){
student1.goLeft();
//Code to render image to the left
}else if(Gdx.input.isKeyPressed(Input.Keys.RIGHT)){
//Code to render image to the right
student1.goRight();
}

batch.begin(); /*default code*/

batch.draw(bg, 0, 0);
student1.renderStudent(stateTime);
batch.end();
}

@Override
public void dispose () {
batch.dispose();
bg.dispose();
student1.dispose();
}
}

最佳答案

您只需要为奔跑创建动画,并使用该动画来显示您的播放器向左或向右奔跑。您可以像这样根据播放器的方向翻转 TextureRegion:

TextureRegion[] character;
boolean isRight;

public Student(float speed, int x, int y){
player = new Texture("student.png");
TextureRegion[][] tmp= TextureRegion.split(player,450/3,450/3);
character = new TextureRegion[9];
int index = 0;
for(int i=0; i <3; i++){
for(int j=0; j < 3; j++){
character[index++] = tmp[i][j];}
}

TextureRegion runningFrames[]=new TextureRegion[3];

for (int i=0;i<runningFrames.length;i++)
runningFrames[i]= character[i];

playerAnimation = new Animation<TextureRegion>(speed, runningFrames);
playerAnimation.setPlayMode(Animation.PlayMode.LOOP);
pX=x;
pY=y;

}

public void goLeft(){
pX-=5;
if(pX < -10){
pX = -10;
}
if(isRight){
isRight=false;
for (TextureRegion textureRegion:playerAnimation.getKeyFrames())
if(textureRegion.isFlipX()) textureRegion.flip(true,false);
}
}

public void goRight(){
pX+=5;
if(!isRight){
isRight=true;
for (TextureRegion textureRegion: playerAnimation.getKeyFrames())
if(!textureRegion.isFlipX()) textureRegion.flip(true,false);
}
}

创建其他 Action 的另一个动画并使用标志绘制动画帧。

关于java - 使用 TextureRegion (LibGDX) 在 Java 中绘制部分 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44568577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com