java游戏动作角色,Libgdx:角色动作和动画

亲爱的先生,亲爱的先生们 . 我遇到了我的角色动画和控件的问题 . 我的问题是每当我试图按左右箭头键时我的播放器上下移动而不是左右移动 . 我确实试图调试我的代码我仍然无法找出代码的哪一部分是错误的 . 这就是为什么我要求你们查找我的代码,并且可能分辨出代码的哪一部分是错误的或者需要改进 .

这是我的播放器的代码:

public class DugmanPlayer {

public enum state

{

standby,

walking,

digging,

dying

}

public enum dir

{

left,

right,

up,

down

}

public static float WIDTH;

public static float HEIGHT;

static float speedmax = 30f;

static float damping = 0.9f;

dir d = dir.up;

public Vector2 position = new Vector2();

public Vector2 speed = new Vector2();

state st = state.walking;

public float statetime = 0;

public void UpdatePlayer(float deltatime)

{

if(deltatime==0)return;

statetime += deltatime;

//rightwalking

if(Math.abs(speed.x) > speedmax) {

speed.x = Math.signum(speed.x) * speedmax;

if(d != dir.left)d = dir.right;

st = state.walking;

}

if(Math.abs(speed.x) < 1) {

speed.x = 0;

if(st!=state.walking)st = state.standby;

d=dir.right;

}

//upwalking

if(Math.abs(speed.y) > speedmax) {

speed.y = Math.signum(speed.y) * speedmax;

if(d != dir.down)d = dir.up;

st = state.walking;

}

if(Math.abs(speed.y) < 1) {

speed.y = 0;

if(st != state.walking)st = state.standby;

d=dir.up;

}

if(Math.abs(-speed.x)>speedmax)

{

speed.x = Math.signum(-speed.x) * speedmax;

if(d != dir.right)d = dir.left;

st = state.walking;

}

if(Math.abs(-speed.x)<1)

{

speed.x = 0;

if(st!=state.walking)st = state.standby;

d=dir.up;

}

if(Math.abs(-speed.y)>speedmax){

speed.y = Math.signum(-speed.y) * speedmax;

if(d != dir.up)d = dir.down;

st = state.walking;

}

if(Math.abs(-speed.y)<1)

{

speed.y = 0;

if(st!=state.walking)st = state.standby;

d=dir.down;

}

speed.scl(deltatime);

position.add(speed);

speed.scl(1/deltatime);

// Apply damping to the velocity on the x-axis so we don't

// walk infinitely once a key was pressed

speed.x *= damping;

speed.y *= damping;

InputProcess();

}

TextureRegion left;

TextureRegion right;

TextureRegion up;

TextureRegion down;

TextureRegion standby;

Animation Walkingleft;

Animation WalkingRight;

Animation WalkingUp;

Animation WalkingDown;

Animation stndbyleft,stndbyright,stndbyup,stndbydown;

public void LoadPlayerTexture()

{

TextureAtlas dug = new TextureAtlas(Gdx.files.internal("character/walking.pack"));

left = dug.findRegion("faceleft");

right = dug.findRegion("faceright");

up = dug.findRegion("faceup");

down = dug.findRegion("facedown");

TextureRegion[] leftwalk = left.split(left.getRegionWidth()/3, left.getRegionHeight()/1)[0];

TextureRegion[] rightwalk = right.split(right.getRegionWidth()/3, right.getRegionHeight()/1)[0];

TextureRegion[] upwalk = up.split(up.getRegionWidth()/3, up.getRegionHeight()/1)[0];

TextureRegion[] downwalk = down.split(down.getRegionWidth()/3, down.getRegionHeight()/1)[0];

Walkingleft = new Animation(0.5f, leftwalk[0],leftwalk[1],leftwalk[2]);

WalkingRight = new Animation(0.5f, rightwalk[0],rightwalk[1],rightwalk[2]);

WalkingUp = new Animation(0.5f, upwalk[0],upwalk[1],upwalk[2]);

WalkingDown = new Animation(0.5f, downwalk[0],downwalk[1],downwalk[2]);

stndbyleft = new Animation(0, leftwalk[1]);

stndbyright = new Animation(0, rightwalk[1]);

stndbyup = new Animation(0, upwalk[1]);

stndbydown = new Animation(0, downwalk[1]);

DugmanPlayer.WIDTH = 1/16f * leftwalk[0].getRegionWidth();

DugmanPlayer.HEIGHT = 1/16f * leftwalk[0].getRegionHeight();

}

public void DrawPlayer(float deltatime, OrthogonalTiledMapRenderer r)

{

Animation fm = null;

boolean loop = true;

switch (st) {

case standby: if(speed.y == 0){

fm = stndbyup;

}

else if(-speed.y == 0){

fm = stndbydown;

}else if (speed.x == 0) {

fm = stndbyright;

}else if (-speed.x == 0) {

fm = stndbyleft;

}

break;

case walking: if(speed.y>speedmax){

fm = WalkingUp;

}else if(-speed.y>speedmax){

fm = WalkingDown;

}else if (speed.x>speedmax) {

fm = WalkingRight;

}else if (-speed.x>speedmax) {

fm = Walkingleft;

}

break;

case digging:

break;

case dying:

break;

default:

break;

}

SpriteBatch batch = r.getSpriteBatch();

batch.begin();

batch.draw(fm.getKeyFrame(statetime, loop), position.x, position.y, WIDTH, HEIGHT);

batch.end();

}

public void InputProcess()

{

if(Gdx.input.isKeyPressed(Keys.UP) || Gdx.input.isKeyPressed(Keys.W)) {

if(st != state.standby)st = state.walking;

speed.y += speedmax;

d = dir.up;

}

else if(Gdx.input.isKeyPressed(Keys.DOWN) || Gdx.input.isKeyPressed(Keys.S)) {

if(st!=state.standby)st = state.walking;

speed.y = -speedmax;

d = dir.down;

}

else if(Gdx.input.isKeyPressed(Keys.LEFT) || Gdx.input.isKeyPressed(Keys.A)) {

if(st!=state.standby)st = state.walking;

speed.y = -speedmax;

d = dir.left;

}

else if(Gdx.input.isKeyPressed(Keys.RIGHT) || Gdx.input.isKeyPressed(Keys.D)) {

if(st!=state.standby)st = state.walking;

speed.y += speedmax;

d = dir.right;

}

else

{

st = state.standby;

speed.x = 0;

speed.y = 0;

}

}

}

我对我的角色类所做的是它将包含我的角色的所有输入,将动画渲染到特定的状态和方向 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值