libgdx rotation (animation, arrays) issues and help needed

Posted by johnny-b on Game Development See other posts from Game Development or by johnny-b
Published on 2014-06-05T00:23:31Z Indexed on 2014/06/05 3:40 UTC
Read the original article Hit count: 396

Filed under:
|

well i am a noob at java and libgdx. i got the homing bullet working with the help of someone. now i am smashing my head as to how i can make it rotate so it faces the ball (which is the main character) when it goes around it or when it is coming towards it. the bullet is facing <--- and the code below is what i have done so far. also i used sprites for the bullet and also animation method.

Also how do i make it an array/arraylist which is best so i can have multiple bullets at random or placed places. i tried many things nothing workd :(

thank you for the help.

// below is the bullet or enemy if you want to call it.

public class Bullet extends Sprite {

  public static final float BULLET_HOMING = 6000; 
  public static final float BULLET_SPEED = 300; 
  private Vector2 velocity;
  private float lifetime;


  public Bullet(float x, float y) {
     velocity = new Vector2(0, 0);
     setPosition(x, y);
  }

  public void update(float delta) {
     float targetX = GameWorld.getBall().getX();
     float targetY = GameWorld.getBall().getY();
     float dx = targetX - getX();
     float dy = targetY - getY();

     float distToTarget = (float) Math.sqrt(dx * dx + dy * dy); 
     dx /= distToTarget;
     dy /= distToTarget;
     dx *= BULLET_HOMING;
     dy *= BULLET_HOMING;
     velocity.x += dx * delta;
     velocity.y += dy * delta;

     float vMag = (float) Math.sqrt(velocity.x * velocity.x + velocity.y * velocity.y);
     velocity.x /= vMag;
     velocity.y /= vMag;
     velocity.x *= BULLET_SPEED;
     velocity.y *= BULLET_SPEED;

     Vector2 v = velocity.cpy().scl(delta);
     setPosition(getX() + v.x, getY() + v.y);
     setOriginCenter(); 
     setRotation(velocity.angle());
     lifetime += delta;
     setRegion(AssetLoader.bulletAnimation.getKeyFrame(lifetime));
  }
}

// this is where i load the images.

public class AssetLoader {
public static Animation bulletAnimation;
public static Sprite bullet1, bullet2;

public static void load() {

    texture = new Texture(Gdx.files.internal("SpriteN1.png"));
    texture.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);

    bullet1 = new Sprite(texture, 380, 350, 45, 20);
    bullet1.flip(false, true);

    bullet2 = new Sprite(texture, 425, 350, 45, 20);
    bullet2.flip(false, true);

    Sprite[] bullets = { bullet1, bullet2 };
    bulletAnimation = new Animation(0.06f, aims);
    bulletAnimation.setPlayMode(Animation.PlayMode.LOOP);
}

public static void dispose() {
    // We must dispose of the texture when we are finished.
    texture.dispose();
}

// this is for the rendering of the images etc

public class GameRenderer {
private Bullet bullet;
private Ball ball;

public GameRenderer(GameWorld world) {
    myWorld = world;
    cam = new OrthographicCamera();
    cam.setToOrtho(true, 480, 320);

    batcher = new SpriteBatch();
    // Attach batcher to camera
    batcher.setProjectionMatrix(cam.combined);

    shapeRenderer = new ShapeRenderer();
    shapeRenderer.setProjectionMatrix(cam.combined);

    // Call helper methods to initialize instance variables
    initGameObjects();
    initAssets();
}

private void initGameObjects() {
   ball = GameWorld.getBall();
   bullet = myWorld.getBullet();
    scroller = myWorld.getScroller();
}

private void initAssets() {
    ballAnimation = AssetLoader.ballAnimation;
    bulletAnimation = AssetLoader.bulletAnimation;
}

public void render(float runTime) {

   Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);

    batcher.begin();
    // Disable transparency 
    // This is good for performance when drawing images that do not require
    // transparency.
    batcher.disableBlending();

    // The ball needs transparency, so we enable that again.
    batcher.enableBlending();


    batcher.draw(AssetLoader.ballAnimation.getKeyFrame(runTime), ball.getX(), ball.getY(), ball.getWidth(), ball.getHeight());

    batcher.draw(AssetLoader.bulletAnimation.getKeyFrame(runTime), bullet.getX(), bullet.getY());

    // End SpriteBatch
    batcher.end();
    }
}

// this is to load the image etc on the screen i guess

public class GameWorld {

public static Ball ball;
private Bullet bullet;
private ScrollHandler scroller;

public GameWorld() {
   ball = new Ball(480, 273, 32, 32);
   bullet = new Bullet(10, 10);
    scroller = new ScrollHandler(0);
}

public void update(float delta) {
    ball.update(delta);
    bullet.update(delta);
    scroller.update(delta);
}

public static Ball getBall() {
    return ball;
}

public ScrollHandler getScroller() {
    return scroller;
}

public Bullet getBullet() { 
   return bullet;
 }
}

so there is the whole thing. the images are loaded via the AssetLoader then to the GameRenderer and GameWorld via the Bullet class. i am guessing that is how it is. sorry newbie so still learning.

thank you in advace for the help or any advice.

© Game Development or respective owner

Related posts about libgdx

Related posts about rotation