Mettre en Pause/Reprendre une Simple Libgdx Jeu pour android
Actuellement, je suis en train de mettre en œuvre simple jeu à l'aide de libgdx pour la Plateforme Android. J'ai mis en œuvre le jeu, mais ne savez pas comment mettre en pause et reprendre le jeu basé sur la saisie de l'utilisateur.Veuillez suggérer l'idée ainsi que certaines pratiques de code pour implémenter la même.Je suis à l'aide de simple code de jeu démontré dans libgdx de la bibliothèque. Merci.
Voici le code :
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() {
}
}
OriginalL'auteur Jigar Pandya | 2014-02-05
Vous devez vous connecter pour publier un commentaire.
Le plus simple c'est que vous ajoutez un Enum:
Et modifier votre rendermethod
Utiliser la fonction de rappel à partir d'android trop. Par exemple, utiliser les rappels de libgdx pour changer l'état:
Aussi ajouter quelque chose comme un setMethod pour l'état, de sorte que vous pouvez changer sur userevent.
Oui, je suis désolé 😀
merci @BennX: je suis capable de mettre en pause, mais aller de l'textures sont encore à clignoter.Ne pas s'arrêter ou suspendre complètement.Des suggestions??
Seau et les gouttes de pluie sont encore vacillante.
que faire dans le curriculum vitae état de l'interrupteur ?
OriginalL'auteur BennX
Vous pouvez utiliser les états, avec enums ou constantes. et uniquement la mise à jour de l'état d'Exécution. Quelque chose comme ceci:
Seau et les gouttes de pluie sont encore vacillante.
OriginalL'auteur Lestat
Je n'ai pas de rep pour répondre aux commentaires, mais le scintillement des éléments est quelque chose que j'ai couru en avant.
Vous n'êtes plus effacer l'écran et de le restituer les sprites dans votre rendu lors de sa pause de droite? Si je ne me trompe pas si vous glClear et de redessiner les srpites dans chaque rendu, je pense qu'il va s'arrêter
Sans doute un peu tard pour aider la personne qui l'a posée. Vous avez besoin d'arrêter le code qui permet de changer de position, mais vous avez besoin de garder leur dessin. Dans votre rendu d'origine de la boucle vous venez de mettre un if(!Pause) autour de tout ce qui est après la fin de la sprite lot
OriginalL'auteur witnessmenow
J'ai essayé d'utiliser cette approche:
J'ai fait GAME_PAUSED un booléen , Si, il est vrai, ne mettez pas à jour votre écran ou l'appareil photo . Autrement mettre à jour la Caméra .
OriginalL'auteur CatchTheThunder
Encore plus simple, voir ici: https://github.com/libgdx/libgdx/wiki/Continuous-&-non-continu-rendu
Dans votre ApplicationListener créer une méthode, il suffit de mettre
Configurer un booléen
Par exemple, puis d'un écouteur de bouton pour mettre en pause/reprendre sur un bouton de la presse
Puis à droite à la fin de votre méthode de rendu, il suffit d'ajouter:
La méthode de rendu est maintenant en pause/reprise.
OriginalL'auteur Steven Marcus Foot