Я только что написал простое приложение для проверки перемещения графики c Текстура по данным, предоставленным пользователем. В центре экрана есть круг png, и если пользователь дотронется до него, круг будет следовать за пальцем пользователя. Вот код:
private int HEIGHT, WIDTH;
private Circle circle;
private final int RADIUS = 256;
private boolean circleTouched, firstClick;
private SpriteBatch batch;
private Texture b1;
@Override
public void create()
{
WIDTH = Gdx.graphics.getWidth();
HEIGHT = Gdx.graphics.getHeight();
circleTouched = false;
firstClick = true;
batch = new SpriteBatch();
b1 = new Texture("b1.png");
circle = new Circle(WIDTH / 2, HEIGHT / 2, RADIUS);
}
@Override
public void render()
{
//Logic
if (Gdx.input.isTouched())
{
if (circleTouched)
{
circle.x += Gdx.input.getDeltaX();
circle.y += Gdx.input.getDeltaY();
}
else if (isCircleTouched(Gdx.input.getX(), Gdx.input.getY(), circle) && firstClick)
{
circleTouched = true;
}
else
{
firstClick = false;
}
}
else
{
circleTouched = false;
firstClick = true;
}
//Drawing
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(b1, circle.x - circle.radius, HEIGHT - circle.y - circle.radius);
batch.end();
}
@Override
public void dispose()
{
super.dispose();
}
private boolean isCircleTouched(int x, int y, Circle c)
{
return ((x - c.x) * (x - c.x) + (y - c.y) * (y - c.y)) <= (c.radius * c.radius);
}
- Является ли это хорошим способом перемещения объектов (если у меня есть 15 объектов, таких как это приложение, производительность все равно будет хорошей?)
- Можно ли использовать функцию рисования не из левого нижнего угла, а из левого верхнего? Мне приходится вычитать высоту каждый раз, когда я рисую.
- Мой png 512x512, как я могу установить размер для рисования текстуры с заданным размером?
РЕДАКТИРОВАТЬ 1. firstClick можно заменить на Gdx.input.justTouched ()