Java tutorial
/* Copyright (c) Philip Bliss, 2013 This file is provided under the Apache License, Version 2.0. See the file LICENSE for more. */ package com.me.mygdxgame; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.Fixture; import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.scenes.scene2d.Actor; public abstract class MoveableActor extends Actor { protected Fixture fixture; protected Texture texture; protected Body body; protected World world; private Vector2 pixelsPerMeter; protected Sprite sprite; protected Vector2 size; protected static final Vector2 TARGET_SIZE = new Vector2(.005f, .02f); protected static final Vector2 AVATAR_SIZE = new Vector2(.02f, .02f); public MoveableActor(GdxTest gdxTest, String textureFilename, Vector2 size) { this.size = size; world = gdxTest.world; pixelsPerMeter = gdxTest.getPixelsPerMeter(); texture = new Texture(Gdx.files.internal(textureFilename)); texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); sprite = new Sprite(texture); Vector2 sizePixel = meterToPixel(size.cpy()); sprite.setSize(sizePixel.x, sizePixel.y); sprite.flip(false, true); } public void dispose() { texture.dispose(); } public Body getBody() { return body; } Vector2 meterToPixel(Vector2 position) { return position.cpy().scl(pixelsPerMeter); } Vector2 pixelToMeter(Vector2 pixelVec) { return pixelVec.cpy().div(pixelsPerMeter); } public void updateScreenPos() { Vector2 targetPosScreen = meterToPixel(body.getPosition()); sprite.setPosition(targetPosScreen.x, targetPosScreen.y); } @Override public void draw(SpriteBatch batch, float parentAlpha) { sprite.draw(batch, parentAlpha); } public void drawDebugLines(ShapeRenderer shapeRenderer) { Vector2 cornerPixel = meterToPixel(body.getPosition()); shapeRenderer.line(cornerPixel.x, cornerPixel.y, cornerPixel.x + sprite.getWidth(), cornerPixel.y); shapeRenderer.line(cornerPixel.x, cornerPixel.y, cornerPixel.x, cornerPixel.y + sprite.getHeight()); } Rectangle getRect() { return new Rectangle(sprite.getX(), sprite.getY(), sprite.getWidth(), sprite.getHeight()); } public Vector2 getWorldCenter() { return new Vector2(body.getWorldCenter().sub(size.cpy().div(2f))); } }