libGDX - Ajouter les scores & afficher dans le coin supérieur gauche de l'écran?
Voici un exemple de code d'un jeu simple dans libGDX.
Quand une goutte de pluie qui tombe dans un seau,le score doit être augmenté d'une unité.
Et le score total doit être indiqué dans le coin supérieur gauche.
Si 3 gouttes d'manqué d'afficher le GAME OVER.
Je sais que pour augmenter le score, mais je ne sais pas pour l'afficher.
Merci.
public class Drop implements ApplicationListener {
Texture dropImage;
Texture bucketImage;
Sound dropSound;
Music rainMusic;
SpriteBatch batch;
OrthographicCamera camera;
Rectangle bucket;
Array<Rectangle> raindrops;
long lastDropTime;
@Override
public void create() {
//load the images for the droplet and the bucket, 64x64 pixels each
dropImage = new Texture(Gdx.files.internal("droplet.png"));
bucketImage = new Texture(Gdx.files.internal("bucket.png"));
//load the drop sound effect and the rain background "music"
dropSound = Gdx.audio.newSound(Gdx.files.internal("drop.wav"));
rainMusic = Gdx.audio.newMusic(Gdx.files.internal("rain.mp3"));
//start the playback of the background music immediately
rainMusic.setLooping(true);
rainMusic.play();
//create the camera and the SpriteBatch
camera = new OrthographicCamera();
camera.setToOrtho(false, 800, 480);
batch = new SpriteBatch();
//create a Rectangle to logically represent the bucket
bucket = new Rectangle();
bucket.x = 800 / 2 - 64 / 2; //center the bucket horizontally
bucket.y = 20; //bottom left corner of the bucket is 20 pixels above the bottom screen edge
bucket.width = 64;
bucket.height = 64;
//create the raindrops array and spawn the first raindrop
raindrops = new Array<Rectangle>();
spawnRaindrop();
}
private void spawnRaindrop() {
Rectangle raindrop = new Rectangle();
raindrop.x = MathUtils.random(0, 800-64);
raindrop.y = 480;
raindrop.width = 64;
raindrop.height = 64;
raindrops.add(raindrop);
lastDropTime = TimeUtils.nanoTime();
}
@Override
public void render() {
//clear the screen with a dark blue color. The
//arguments to glClearColor are the red, green
//blue and alpha component in the range [0,1]
//of the color to be used to clear the screen.
Gdx.gl.glClearColor(0, 0, 0.2f, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
//tell the camera to update its matrices.
camera.update();
//tell the SpriteBatch to render in the
//coordinate system specified by the camera.
batch.setProjectionMatrix(camera.combined);
//begin a new batch and draw the bucket and
//all drops
batch.begin();
batch.draw(bucketImage, bucket.x, bucket.y);
for(Rectangle raindrop: raindrops) {
batch.draw(dropImage, raindrop.x, raindrop.y);
}
batch.end();
//process user input
if(Gdx.input.isTouched()) {
Vector3 touchPos = new Vector3();
touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
camera.unproject(touchPos);
bucket.x = touchPos.x - 64 / 2;
}
if(Gdx.input.isKeyPressed(Keys.LEFT)) bucket.x -= 200 * Gdx.graphics.getDeltaTime();
if(Gdx.input.isKeyPressed(Keys.RIGHT)) bucket.x += 200 * Gdx.graphics.getDeltaTime();
//make sure the bucket stays within the screen bounds
if(bucket.x < 0) bucket.x = 0;
if(bucket.x > 800 - 64) bucket.x = 800 - 64;
//check if we need to create a new raindrop
if(TimeUtils.nanoTime() - lastDropTime > 1000000000) spawnRaindrop();
//move the raindrops, remove any that are beneath the bottom edge of
//the screen or that hit the bucket. In the later case we play back
//a sound effect as well.
Iterator<Rectangle> iter = raindrops.iterator();
while(iter.hasNext()) {
Rectangle raindrop = iter.next();
raindrop.y -= 200 * Gdx.graphics.getDeltaTime();
if(raindrop.y + 64 < 0) iter.remove();
if(raindrop.overlaps(bucket)) {
dropSound.play();
iter.remove();
}
}
}
@Override
public void dispose() {
//dispose of all the native resources
dropImage.dispose();
bucketImage.dispose();
dropSound.dispose();
rainMusic.dispose();
batch.dispose();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
Vous devez vous connecter pour publier un commentaire.
Ici est un lien vers un libGDX utilisateurs de wiki que j'ai trouvé utile lorsque j'avais rencontré la même question pour un remake de Pong.
D'afficher le score, les outils que vous avez besoin sont: une variable int pour garder le score, une Chaîne ou CharacterSequence variable à l'aide de l'affichage de la partition (je vais utiliser une Chaîne de caractères), et un BitmapFont qui est utilisé pour afficher un type de police.
Première étape: déclarer l'ensemble de ces outils.
Deuxième étape: les initialiser dans la méthode create
Tertiaire étape: incrémentation de la variable et de changer le yourScoreName variable de Chaîne de votre collision logique de la méthode (quand la goutte d'eau recouvre le seau).
Quatrième étape: Dans la méthode render (), définissez la couleur de la police et de l'appel de la méthode dessiner sur votre BitmapFont entre spriteBatch.commencer et spriteBatch.fin.
Jouer avec: les paramètres de la police.setColor() la méthode de sorte que vous pouvez les voir en contraste avec la couleur de fond, le nombre de paramètres dans la police.méthode draw() pour obtenir le score liées textures affichées dans le coin supérieur gauche (les deux dernières certain nombre de paramètres dans la police.méthode draw() représentent les coordonnées x et y de la partition de la texture).
Cinquième étape: lancez le, puis sourire.
La même logique s'applique à l'affichage, "GAME OVER". Pour les fins heuristiques, je vais laisser la création de la logique jusqu'à vous.
Lire la documentation dans le lien à acquérir une compréhension plus profonde de la magie.
D'afficher le score, vous pouvez créer une scène.
Alors vous aurez à créer comme une étiquette, et une police de texte. Ainsi, vous pouvez le chercher sur le libgdx wiki pour plus de détails.
Puis il suffit de l'ajouter à la scène quand le jeu est perdu à l'aide de: