我对LibGdx很陌生,我还在学习。我正在开发一个小游戏项目来学习这个漂亮的框架。但是,我的游戏存在一些问题。我的游戏是一个自上而下的射击游戏。有一个人类角色(太空海洋)必须射击一个外星人,它将一直向他的方向移动,直到它死亡。我的代码还没有任何子弹。我能够让射手向光标方向旋转,外星人也会朝着射手的方向旋转,但是我不能让外星人向他的方向移动。我很确定我的方法是完全错误的。我已经尝试了很多修复它,但我无法修复它!我感谢你的关注! 您可以在此处找到主类的完整代码: https://github.com/Igor-Lopes/LibGdx/blob/master/Splash.java#L125
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();
}
答案 0 :(得分:0)
我还没有足够的声望点来添加“评论”,我不确定这是不是你的问题,但是一个明确的错误就是在你的moveAlien方法中做了“Y + = X” line:vAlien.y + = vAlien.x * Gdx.graphics.getDeltaTime();
答案 1 :(得分:0)
我有一段时间的解决方案,但我忘了发帖。这是将敌人列表移向玩家的方法。
public void moveAlien() {
for (Aliens a : aliens) { //List of Aliens (Enemy)
Sprite s = a.getSprite(); //Get current enemy's sprite
float targetX = spacemarine.getX(); //Player's X
float targetY = spacemarine.getY(); //Player's Y
float spriteX = s.getX(); //Enemy's X
float spriteY = s.getY(); //Enemy's Y
float x2 = s.getX(); //Enemy's new X
float y2 = s.getY(); //Enemy's new Y
float angle; // We use a triangle to calculate the new trajectory
angle = (float) Math
.atan2(targetY - spriteY, targetX - spriteX);
x2 += (float) Math.cos(angle) * 125
* Gdx.graphics.getDeltaTime();
y2 += (float) Math.sin(angle) * 125
* Gdx.graphics.getDeltaTime();
s.setPosition(x2, y2); //Set enemy's new positions.
}
}