Android Games: Exemplo 02
De Aulas
Links relacionados: Jogos Digitais
Recursos
Classe Character
1package com.mygdx.game;
2
3import com.badlogic.gdx.Gdx;
4import com.badlogic.gdx.Input.Keys;
5import com.badlogic.gdx.graphics.Texture;
6import com.badlogic.gdx.graphics.g2d.Sprite;
7import com.badlogic.gdx.graphics.g2d.SpriteBatch;
8import com.badlogic.gdx.graphics.g2d.TextureRegion;
9
10public class Character {
11 private MyGdxGame game;
12 private Texture texture;
13 private int pw;
14 private int ph;
15 private int x;
16 private int y;
17 private int step;
18 private int direction;
19
20 public Character(MyGdxGame game, String fileTexture, int x, int y, int tw, int th) {
21 this.game = game;
22 setX(x);
23 setY(y);
24 pw = (tw / 7);
25 ph = (th / 4);
26 texture = new Texture(fileTexture);
27 }
28
29 public void run() {
30 if (Gdx.input.isKeyPressed(Keys.UP)) {
31 direction = 2;
32 if (game.path(x + (pw / 2), y + ph)) {
33 step++;
34 y += 2;
35 }
36 }
37 if (Gdx.input.isKeyPressed(Keys.DOWN)) {
38 direction = 0;
39 if (game.path(x + (pw / 2), y)) {
40 step++;
41 y -= 2;
42 }
43 }
44 if (Gdx.input.isKeyPressed(Keys.LEFT)) {
45 direction = 1;
46 if (game.path(x, y + (ph / 2))) {
47 x -= 2;
48 step++;
49 }
50 }
51 if (Gdx.input.isKeyPressed(Keys.RIGHT)) {
52 direction = 3;
53 if (game.path(x + pw, y + (ph / 2))) {
54 step++;
55 x += 2;
56 }
57 }
58 if (step >= 7) {
59 step = 0;
60 }
61 }
62
63 public void draw(SpriteBatch batch) {
64 TextureRegion region = new TextureRegion(texture, step * pw, direction * ph, pw, ph);
65 Sprite sprite = new Sprite(region);
66 sprite.setPosition(x - game.getX(), y - game.getY());
67 sprite.draw(batch);
68 }
69
70 public int getX() {
71 return x;
72 }
73
74 public void setX(int x) {
75 this.x = x;
76 }
77
78 public int getY() {
79 return y;
80 }
81
82 public void setY(int y) {
83 this.y = y;
84 }
85
86 public void dispose() {
87 texture.dispose();
88 }
89
90 public int getStep() {
91 return step;
92 }
93
94 public void setStep(int step) {
95 this.step = step;
96 }
97
98 public int getDirection() {
99 return direction;
100 }
101
102 public void setDirection(int direction) {
103 this.direction = direction;
104 }
105
106 public int getWidth() {
107 return pw;
108 }
109
110 public int getHeight() {
111 return ph;
112 }
113}
Classe Principal
1package com.mygdx.game;
2
3import com.badlogic.gdx.Gdx;
4import com.badlogic.gdx.graphics.Color;
5import com.badlogic.gdx.graphics.GL20;
6import com.badlogic.gdx.graphics.Pixmap;
7import com.badlogic.gdx.graphics.Texture;
8import com.badlogic.gdx.graphics.g2d.Sprite;
9import com.badlogic.gdx.graphics.g2d.SpriteBatch;
10import com.badlogic.gdx.graphics.g2d.TextureRegion;
11import com.badlogic.gdx.ApplicationAdapter;
12
13public class MyGdxGame extends ApplicationAdapter {
14 private SpriteBatch batch;
15 private int x, y, w, h;
16 private Texture ground;
17 private Pixmap mask;
18 private Character avatar;
19
20 @Override
21 public void create() {
22 w = Gdx.graphics.getWidth();
23 h = Gdx.graphics.getHeight();
24 batch = new SpriteBatch();
25 ground = new Texture(Gdx.files.internal("bigmap.png"));
26 mask = new Pixmap(Gdx.files.internal("bigmask.png"));
27 avatar = new Character(this, "claudius.png", 710, 64, 224, 256);
28 x = 0;
29 y = 0;
30 }
31
32 public boolean path(int px, int py) {
33 Color color = new Color();
34 int valor = mask.getPixel(px, mask.getHeight() - py);
35 Color.rgb888ToColor(color, valor);
36 int r = (int) (color.r * 255f);
37 int g = (int) (color.g * 255f);
38 int b = (int) (color.b * 255f);
39 if ((r > 20) && (g > 20) && (b > 20)) {
40 return true;
41 }
42 return false;
43 }
44
45 @Override
46 public void dispose() {
47 batch.dispose();
48 ground.dispose();
49 avatar.dispose();
50 }
51
52 @Override
53 public void render() {
54 avatar.run();
55 Gdx.gl.glClearColor(0, 0, 0, 1);
56 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
57 batch.begin();
58 drawBackground();
59 avatar.draw(batch);
60 batch.end();
61 }
62
63 public void drawBackground() {
64 x = avatar.getX() - (w / 2) + (avatar.getWidth() / 2);
65 y = avatar.getY() - (h / 2) + (avatar.getHeight() / 2);
66 TextureRegion reg = new TextureRegion(ground, x, ground.getHeight() - y - h, w, h);
67 Sprite sprite = new Sprite(reg);
68 sprite.setPosition(0, 0);
69 sprite.draw(batch);
70 }
71
72 public int getX() {
73 return x;
74 }
75
76 public int getY() {
77 return y;
78 }
79}