如何使用libgdx使图像消失

时间:2014-03-02 03:18:28

标签: android mobile libgdx

我一直在制作游戏,最近我遇到了让图像消失的问题。我的代码如下

package com.me.fixGame;

import java.util.Random;









import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Texture;


import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
//import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.utils.Scaling;
import com.sun.jmx.snmp.tasks.Task;


public class fixGame implements ApplicationListener {
    SpriteBatch batch;
    SpriteBatch spriteBatch;
    Texture trash; 
    Texture paper;
    SpriteBatch spritebatch;
    Vector2 position;
    Vector2 pas;
    boolean collide;
    boolean countMe=false;
    Vector2 size;
    Vector2 size2;
    Vector2 pos;
    Rectangle bounds;
    Rectangle bounds2;
    float delay = 1; // seconds
boolean counted= false;
    int score = 3;
    //Texture Gogreen;
    String myScore;
    Texture background; 
    CharSequence str = "Lives left: 3"; // = myScore;
    CharSequence line = "Score: 0"; // = myScore;
    String myLife;
    int life=0;
    BitmapFont font;
    float x;
    float y;
    boolean collision = false;
    @Override
    public void create() {  

     //Gogreen = new Texture(Gdx.files.internal("data/gogreenNow.jpg"));
     background = new Texture(Gdx.files.internal("data/trash.png"));

     x= background.getWidth();
     y=background.getHeight();
        //float delaySeconds = 1;
        spriteBatch = new SpriteBatch();
    trash = new Texture(Gdx.files.internal("data/trash.png"));
    paper = new Texture(Gdx.files.internal("data/paper1.jpg"));
    position = new Vector2(100, 50);
    pos = new Vector2(54, 14);
    batch = new SpriteBatch();
    BitmapFont font = new BitmapFont();

    size2 = new Vector2(trash.getWidth() ,trash.getHeight() );
    //size2.y = trash.getHeight();
    //size2.x = trash.getWidth();
    size = new Vector2(paper.getWidth() ,paper.getHeight());

    bounds= new Rectangle(pos.x, pos.y, size.x, size.y);
    bounds2= new Rectangle(position.x, position.y, size2.x, size2.y);

    }

    @Override
    public void dispose() {

    }
    public void update(){
        bounds.set(pos.x, pos.y, size.x, size.y);
        bounds2.set(position.x, position.y, size2.x, size2.y);

        position.x = position.x -2- Gdx.input.getAccelerometerX();
    }




    @Override
    public void render() {

        if(bounds.overlaps(bounds2)){
            collision=true; 
            counted=true;
        }else{
            collision=false;
        }

        if(collision==true){

        } 
        if(pos.y<640){
            counted=false;
        } else if(pos.y > 640 && collision==false && counted==false){
            counted=true;
            score= score-1;
            myScore = "Lives left: " + score;
            str = myScore;
        }



        if(bounds.overlaps(bounds2)){

            countMe=true;
            life= life+50;
            myLife = "Score: " + life;
            line = myLife;
        }


        if(position.x<0){
            position.x= position.x+11;
        }
        if(position.x>425){
            position.x= position.x-11;
        }


          update();
            Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        pos.y=pos.y-12;
        if(pos.y<0){
            pos.y = 700;
            Random randomGenerator = new Random();
              pos.x = randomGenerator.nextInt(500);
        }
        BitmapFont font = new BitmapFont();


        batch.begin();

         batch.draw(background, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());


        batch.draw(paper, pos.x, pos.y);
        batch.draw(trash, position.x, position.y);
        font.setScale(3);

        font.setColor(0.0f, 0.0f, 1.0f,1.0f);
        font.draw(batch, str, 200,900);
        font.draw(batch, line, 200, 700);
                batch.end();
                font.dispose(); 
    }

     @Override  
    public void resize(int width, int height) {

    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }
}

我想把我的图像称为纸张消失,我在这里实例化。

 x= background.getWidth();
     y=background.getHeight();
        //float delaySeconds = 1;
        spriteBatch = new SpriteBatch();
    trash = new Texture(Gdx.files.internal("data/trash.png"));
    paper = new Texture(Gdx.files.internal("data/paper1.jpg"));
    position = new Vector2(100, 50);
    pos = new Vector2(54, 14);
    batch = new SpriteBatch();
    BitmapFont font = new BitmapFont();

我希望它消失的地方如下:

如果(bounds.overlaps(bounds2)){

        countMe=true;
        life= life+50;
        myLife = "Score: " + life;
        line = myLife;
    }

我想要做的是当两个对象重叠(边界和边界2)时,应该更改分数,并且其中一个对象(纸张)应该隐藏。如何隐藏图像?

1 个答案:

答案 0 :(得分:0)

因为你已经将碰撞状态设置为变量,所以你需要在render()方法中包装batch.draw()方法。我已经测试了这段代码,但它确实有用。当您将纸张设置回顶部时,您还需要将碰撞设置为false,我猜您希望它完全隐藏,直到它重置为止。请注意我也做了一些小调整,因此更容易测试。如果仍有运行时错误,则与此更改无关。

@Override
public void render() {
    if (bounds.overlaps(bounds2)) {
        collision = true;
        counted = true;
    }

    if (pos.y < 640) {
        counted = false;
    } else if (pos.y > 640 && collision == false && counted == false) {
        counted = true;
        score = score - 1;
        myScore = "Lives left: " + score;
        str = myScore;
    }

    if (bounds.overlaps(bounds2)) {
        countMe = true;
        life = life + 50;
        myLife = "Score: " + life;
        line = myLife;
    }

    if (position.x < 0) {
        position.x = position.x + 11;
    }
    if (position.x > 425) {
        position.x = position.x - 11;
    }

    update();
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    pos.y = pos.y - 2;
    if (pos.y < 0) {
        pos.y = 700;
        Random randomGenerator = new Random();
        pos.x = 250;
        collision = false;
    }
    BitmapFont font = new BitmapFont();

    batch.begin();

    batch.draw(background, 0, 0, Gdx.graphics.getWidth(),
            Gdx.graphics.getHeight());

    if (!collision) {
    batch.draw(paper, pos.x, pos.y);
    }
    batch.draw(trash, position.x, position.y);
    font.setScale(1.5f);

    font.setColor(0.0f, 0.0f, 1.0f, 1.0f);
    font.draw(batch, str, 20, 50);
    font.draw(batch, line, 20, 100);
    batch.end();
    font.dispose();
}