Я добрый новый для LibGdx, и я все еще учусь. Я работаю над небольшим игровым проектом, чтобы изучить эту приятную структуру. Однако у меня возникают проблемы с моей игрой. Моя игра - стрелок сверху вниз. Существует человеческий характер (космический морской), который должен стрелять в инопланетянина, который всегда будет двигаться в его направлении, пока он не умрет. У моего кода еще нет пуль. Я смог заставить стрелка вращаться в направлении курсора, а иностранец вращается в направлении стрелка, но я не могу заставить инопланетянина двигаться в его направлении , Я почти уверен, что мой метод, который делает это, является абсолютно неправильным. Я пробовал много, чтобы исправить это, но я не могу исправить это! Я ценю ваше внимание, ребята! Вы можете найти полный код главного класса здесь: https://github.com/Igor-Lopes/LibGdx/blob/master/Splash.java#L125LibGdx - Переместить Sprite в направлении другого
public void moveAlien() {
float mX = 0;
float mY = 0;
int velocity = 50;
vAlien = new Vector2(-1 * (float) Math.sin(Alienbody.getAngle()) * velocity,
(float) Math.cos(Alienbody.getAngle() * velocity));
mX = (float) Math.cos(Math.toRadians(spacemarine.getRotation()));
mY = (float) Math.sin(Math.toRadians(spacemarine.getRotation()));
vAlien.x = mX;
vAlien.y = mY;
if (vAlien.len() > 0) {
vAlien = vAlien.nor();
}
vAlien.x = vAlien.x * velocity;
vAlien.y = vAlien.y * velocity;
vAlien.x += vAlien.x * Gdx.graphics.getDeltaTime();
vAlien.y += vAlien.x * Gdx.graphics.getDeltaTime();
}
public float rotateMarine() {
float angle = 0;
float mouseX = 0;
float mouseY = 0;
mouseX = Gdx.input.getX();
mouseY = 677 - Gdx.input.getY();
angle = (float) Math.toDegrees(Math.atan2(mouseX - spacemarine.getX(),
mouseY - spacemarine.getY()));
if (angle < 0)
angle += 360;
spacemarine.setRotation(angle * -1);
return angle;
}
public float rotateAlien(Sprite s, float posX, float posY) {
float angle = 0;
float mouseX = 0;
float mouseY = 0;
mouseX = posX;
mouseY = posY;
angle = (float) Math.toDegrees(Math.atan2(mouseX - s.getX(), mouseY - s.getY()));
if (angle < 0)
angle += 360;
s.setRotation(angle * -1);
return angle;
}
@Override
public void render(float delta) {
float angle;
moveAlien();
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
world.step(Gdx.graphics.getDeltaTime(), 6, 2);
angle = rotateMarine();
rotateAlien(alien, spacemarine.getX(),
spacemarine.getY());
if (Gdx.input.isKeyPressed(Input.Keys.W) == true
&& spacemarine.getY() < 560) {
Marinebody.setTransform(spacemarine.getX(), spacemarine.getY() + 4,
angle);
}
if (Gdx.input.isKeyPressed(Input.Keys.S) == true
&& spacemarine.getY() > 0) {
Marinebody.setTransform(spacemarine.getX(), spacemarine.getY() - 4,
angle);
}
if (Gdx.input.isKeyPressed(Input.Keys.D) == true
&& spacemarine.getX() < 920) {
Marinebody.setTransform(spacemarine.getX() + 4, spacemarine.getY(),
angle);
}
if (Gdx.input.isKeyPressed(Input.Keys.A) == true
& spacemarine.getX() > 8) {
Marinebody.setTransform(spacemarine.getX() - 4, spacemarine.getY(),
angle);
}
alien.setPosition(Alienbody.getPosition().x, Alienbody.getPosition().y);
spacemarine.setPosition(Marinebody.getPosition().x, Marinebody.getPosition().y);
batch.begin();
spacemarine.draw(batch);
alien.draw(batch);
batch.end();
// stage.act();
// stage.draw();
}
Вы используете Box2D? Если это так, то вы не должны устанавливать позиции 'Body' напрямую, но пусть физический движок (Box2D) справится с этим. Это означает, что вы должны использовать силы и импульсы для перемещения тела. – Springrbua
Предположим, что я пытаюсь использовать Box2d, и я новичок в этом, поэтому я не получил работу, перемещая спрайт с помощью физики. Поскольку это стрелок сверху вниз, я использую 0 как гравитацию. –
Как только вы начали использовать Libgdx, я предлагаю вам начать с менее сложных игр без использования Box2D. В любом случае, (IMHO) лучший способ узнать Box2D - http://www.iforce2d.net/b2dtut/. Примеры находятся на C++, насколько я помню, но теория такая же, и вы должны иметь возможность делать то же самое с оберткой jBox2D. – Springrbua