Android Games: SimpleGravity
De Aulas
Revisão de 14h22min de 26 de outubro de 2020 por Admin (discussão | contribs) (Admin moveu Android Games: HelloWorld para Android Games: SimpleGravity)
Recursos
Classe MyGdxGame
package com.mygdx.game;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
float x, y;
int speed = 5;
int H, W;
int h, w;
float G = 0.98f;
float fy = 0f;
boolean jumping = false;
@Override
public void create() {
// Inicializa e aloca os recursos
batch = new SpriteBatch();
img = new Texture("sphere.png");
h = img.getHeight();
w = img.getWidth();
H = Gdx.graphics.getHeight();
W = Gdx.graphics.getWidth();
}
private void execute() {
// Pega as setas do teclado para ir para os lados
if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {
x -= speed;
} else if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {
x += speed;
}
// Se digitar a seta para cima, a bolinha irá pular se ela já não estiver pulando
if (Gdx.input.isKeyJustPressed(Input.Keys.UP)) {
if (!jumping) {
// O pulo é simplesmente dar uma força negativa da gravidade
fy = -20;
jumping = true;
}
}
// Aplica a gravidade
// na força da bolinha em y, será adicionado mais gravidade para cada iteração,
// ou seja, é uma aceleração. O y ser-a o valor da força y negativada.
fy += G;
y -= fy;
// Não deixa a bolinha sair da tela.
if (x + w > W) x = W - w;
if (x < 0) x = 0;
if (y + h > H) y = H - h;
if (y < 0) {
// Se cair no chão, inverte a força y da bolinha, somando menos 2 e zera y
fy = -(fy - 2);
y = 0;
// Mas só pode pular novamente depois que parar de quicar
if (fy > 0) {
jumping = false;
}
}
}
@Override
public void render() {
/*
O gameloop é [processInput -> execute -> render] e depois reinicia esses processos.
O processInput já foi feito pela biblioteca. Aqui é o render, então temos que fazer
o execute antes das linhas de código do render.
*/
execute();
// Linhas de código do render
Gdx.gl.glClearColor(0, 0.5f, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(img, x, y);
batch.end();
}
@Override
public void dispose() {
// Limpa a memória dos recursos alocados.
batch.dispose();
img.dispose();
}
}