如何使一个字符遵循主字符路径? LIBGDX / JAVA

问题描述 投票:3回答:1

我正在使用Box2d在libgdx / java中的RPG 2d中工作。

我有主角和其他3位。我希望他们沿着主角的同一条路线走一条蛇(与Master System / Phantasy Star和其他旧的RPG一样),以避免在发现狭窄入口时弄乱。

enter image description here

在我的PlayScreen课堂上,我分别呼叫所有角色。

    private static Alis _player;
    private static Myau _follower;
    private static Odin _follower1;
    private static Noah _follower2;

在构造器的播放屏幕上]

_player = new Alis(world, this, mapManager);
_follower = new Myau(world, this, mapManager);
_follower1 = new Odin(world, this, mapManager);
_follower2 = new Noah(world, this, mapManager);

HandleInput(float dt)方法,我只移动主角色

if(Gdx.input.isKeyPressed(Input.Keys.RIGHT) && _player.b2body.getLinearVelocity().x <= 0.5f) {
_player.b2body.applyLinearImpulse(new Vector2(0.05f, 0), _player.b2body.getWorldCenter(), true);

}else if(Gdx.input.isKeyPressed(Input.Keys.LEFT) && _player.b2body.getLinearVelocity().x >= -0.5f) {
_player.b2body.applyLinearImpulse(new Vector2(-0.05f, 0), _player.b2body.getWorldCenter(), true);

}else if(Gdx.input.isKeyPressed(Input.Keys.RIGHT) == Gdx.input.isKeyPressed(Input.Keys.LEFT)){
_player.b2body.setLinearVelocity(0f, _player.b2body.getLinearVelocity().y);
}

if(Gdx.input.isKeyPressed(Input.Keys.UP) && _player.b2body.getLinearVelocity().y <= 0.5f) {
_player.b2body.applyLinearImpulse(new Vector2(0, 0.05f), _player.b2body.getWorldCenter(), true);
} else if(Gdx.input.isKeyPressed(Input.Keys.DOWN) && _player.b2body.getLinearVelocity().y >= -0.5f) {
_player.b2body.applyLinearImpulse(new Vector2(0, -0.05f), _player.b2body.getWorldCenter(), true);
} else if(Gdx.input.isKeyPressed(Input.Keys.UP) == Gdx.input.isKeyPressed(Input.Keys.DOWN)){          _player.b2body.setLinearVelocity(_player.b2body.getLinearVelocity().x, 0f);
}

update(float dt)方法

handleInput(dt);
_player.update(dt);
_follower.update(dt, _player.b2body.getPosition());
_follower1.update(dt, _follower.b2body.getPosition());
_follower2.update(dt, _follower1.b2body.getPosition());

render(float delta)方法

game.batch.begin();
_follower2.draw(game.batch);
_follower1.draw(game.batch);
_follower.draw(game.batch);
_player.draw(game.batch);
game.batch.end();

dispose()方法

_player.dispose();
_follower.dispose();
_follower1.dispose();
_follower2.dispose();

现在,在我的角色类内部,在update(float dt,Vector2位置)

方法上
if ((position.x - b2body.getPosition().x) > (15 /PhantasyStar.PPM)) {
            b2body.setLinearVelocity(new Vector2(0.5f, 0));

} else if ((position.x - b2body.getPosition().x) < ( - 15 /PhantasyStar.PPM)) {
            b2body.setLinearVelocity(new Vector2(-0.5f, 0));

} else if ((position.y - b2body.getPosition().y) > (15 / PhantasyStar.PPM)) {
            b2body.setLinearVelocity(new Vector2(0, 0.5f));

} else if ((position.y - b2body.getPosition().y) < (-15 / PhantasyStar.PPM)) {
            b2body.setLinearVelocity(new Vector2(0, -0.5f));

} else if (((position.y - b2body.getPosition().y) <= (15 / PhantasyStar.PPM) && (position.y - b2body.getPosition().y) >= (-15 / PhantasyStar.PPM)) || ((position.x - b2body.getPosition().x) <= (15 /PhantasyStar.PPM) && (position.x - b2body.getPosition().x) >= (-15 /PhantasyStar.PPM)) ) {
            b2body.setLinearVelocity(new Vector2(0, 0));
         }

setPosition(b2body.getPosition().x - getWidth() / 2, b2body.getPosition().y - getHeight() / 4);

setRegion(getFrame(dt));

例如,如果我仅在x轴或y轴上行走,则玩家可以按照我的需要正确行走,彼此之间有正确的距离,也可以正确返回,但是,如果我开始上下移动,他们开始互相跟随,但是每次我遇到障碍时,一些追随者就会卡住。因此,我希望他们遵循主角的确切路径。

我100%的所作所为是不正确的,但是我试图为此找到一些文献,但没有找到。我相信,如果我找到了一种方法来获得主要玩家的最后位置并使其成为第二个目标。

我试图将玩家位置更新为最后位置并将其用于追随者中的下一个更新,但是,即使我要求追随者跟随该位置,也太接近了,所以我认为不是正确的位置来收集,或者可能是另一种收集方法。我是否需要创建一个数组来收集所有位置并将此信息延迟传递给其他字符?

有人在游戏开发方面有更多经验的人可以帮助我吗?

我正在使用Box2d在libgdx / java中的RPG 2d中工作。我有主角和其他3个。我希望他们像蛇一样沿着主角的相同路径走(与...

java libgdx frameworks box2d
1个回答
0
投票

在PlayScreen类上,创建2个Arrays变量。这两个数组将收集主要玩家的位置和状态。

public class PlayScreen implements Screen {
private Array<Vector2> _playerPath;
private Array<Alis.State> _playerState;
}
© www.soinside.com 2019 - 2024. All rights reserved.