如何在Java中通过X和Y的范围确定图像重叠

时间:2014-03-21 12:04:27

标签: java eclipse image overlap

所以我一直试图创造一个小游戏" frogger"只有我用过训练师而不是青蛙和口袋妖怪代替汽车。很简单。到目前为止,我已经按计划移动和重置所有内容,但是当我尝试确定训练师和口袋妖怪的重叠时,问题就出现了。目前我有编码,它获得每个的X和Y坐标,如果它们彼此相等,那么训练师将重置为开头。显然我意识到这意味着教练只有在X和Y完全相同的情况下才会重置,尽管它们是否重叠。所以我试着这样做,如果训练师在get.X()和get.Y()的范围内,但那不起作用。任何帮助/建议将不胜感激。在编程方面,我并不是那么聪明,我只是把它作为一种爱好,所以请尽可能简化术语:P

    Thread t = new Thread(new MainLoop());
        t.start();
    }

    private class MyKeyListener extends KeyAdapter{
        public void keyPressed(KeyEvent e){
            switch (e.getKeyCode()){
                case KeyEvent.VK_LEFT:
                leftKey = true;
                break;
                case KeyEvent.VK_RIGHT:
                rightKey = true;
                break;
                case KeyEvent.VK_UP:
                upKey = true;
                break;
                case KeyEvent.VK_DOWN:
                downKey = true;
                break;
            }
        }
        public void keyReleased(KeyEvent e){
            switch (e.getKeyCode()){
                case KeyEvent.VK_LEFT:
                leftKey = false;
                break;
                case KeyEvent.VK_RIGHT:
                rightKey = false;
                break;
                case KeyEvent.VK_UP:
                upKey = false;
                break;
                case KeyEvent.VK_DOWN:
                downKey = false;
                break;
            }
        }
    }
    public class MainLoop implements Runnable{
        public MainLoop(){
        }
        public void run(){
            while(true){
                if(upKey){ trainer.moveUp();
                           pikachu.run();
                           squirtle.run();
                           golbat.run();
                           snivy.run();
                           snorlax.run();
                           bulbasaur.run();
                           jolteon.run();
                           espeon.run();
                           charmander.run();
                           sableye.run();
                           gardevoir.run();
                           manectric.run();}
                if(downKey){ trainer.moveDown();
                            pikachu.run();
                            squirtle.run();
                            golbat.run();
                            snivy.run();
                            snorlax.run();
                            bulbasaur.run();
                            jolteon.run();
                            espeon.run();
                            charmander.run();
                            sableye.run();
                            gardevoir.run();
                            manectric.run();}
                if(leftKey){ trainer.moveLeft();
                            pikachu.run();
                            squirtle.run();
                            golbat.run();
                            snivy.run();
                            snorlax.run();
                            bulbasaur.run();
                            jolteon.run();
                            espeon.run();
                            charmander.run();
                            sableye.run();
                            gardevoir.run();
                            manectric.run();}
                if(rightKey){ trainer.moveRight();
                            pikachu.run();
                            squirtle.run();
                            golbat.run();
                            snivy.run();
                            snorlax.run();
                            bulbasaur.run();
                            jolteon.run();
                            espeon.run();
                            charmander.run();
                            sableye.run();
                            gardevoir.run();
                            manectric.run();}
                if (trainer.getPy() == squirtle.getPy() & trainer.getPx() == squirtle.getPx()){
//                  if (squirtle.getPy() - 10 <= trainer.getPy() <= squirtle.getPy() +10 & squirtle.getPx() - 10 <= trainer.getPx() <= squirtle.getPx() +10 ){

                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == pikachu.getPy() & trainer.getPx() == pikachu.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == golbat.getPy() & trainer.getPx() == golbat.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == snivy.getPy() & trainer.getPx() == snivy.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == snorlax.getPy() & trainer.getPx() == snorlax.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == bulbasaur.getPy() & trainer.getPx() == bulbasaur.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == jolteon.getPy() & trainer.getPx() == jolteon.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == espeon.getPy() & trainer.getPx() == espeon.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == charmander.getPy() & trainer.getPx() == charmander.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == sableye.getPy() & trainer.getPx() == sableye.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == gardevoir.getPy() & trainer.getPx() == gardevoir.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() == manectric.getPy() & trainer.getPx() == manectric.getPx()){
                            trainer.dead();
                            Skully skull = new Skully (trainer.getPx(), trainer.getPy());
                            }
                if (trainer.getPy() <= 25){

                }

                repaint();
                try {
                    Thread.sleep(40);
                }
                catch (InterruptedException ex){
                }
            }
        }
    }

    public void drawScreen(Graphics display){
        backBuffer.drawImage(background,0,0,null);
        backBuffer.drawImage(Trainer, trainer.getPx(), trainer.getPy(), null);
        backBuffer.drawImage(Pikachu, pikachu.getPx(), pikachu.getPy(),null);
        backBuffer.drawImage(Manectric, manectric.getPx(), manectric.getPy(),null);
        backBuffer.drawImage(Snivy, snivy.getPx(), snivy.getPy(), null);
        backBuffer.drawImage(Snorlax, snorlax.getPx(), snorlax.getPy(), null);
        backBuffer.drawImage(Bulbasaur, bulbasaur.getPx(), bulbasaur.getPy(), null);
        backBuffer.drawImage(Jolteon, jolteon.getPx(), jolteon.getPy(), null);
        backBuffer.drawImage(Espeon, espeon.getPx(), espeon.getPy(), null);
        backBuffer.drawImage(Charmander, charmander.getPx(), charmander.getPy(), null);
        backBuffer.drawImage(Sableye, sableye.getPx(), sableye.getPy(), null);
        backBuffer.drawImage(Golbat, golbat.getPx(),  golbat.getPy(),null);
        backBuffer.drawImage(Gardevoir, gardevoir.getPx(), gardevoir.getPy(), null);
        backBuffer.drawImage(Squirtle, squirtle.getPx(), squirtle.getPy(),null);
        display.drawImage(frontBuffer,0,0,this);
    }
    public void update(Graphics display){
        drawScreen(display);
    }
} 

1 个答案:

答案 0 :(得分:0)

您应该为游戏中的所有项目设置一个方形区域,并创建一个具有左上角和右下角属性的类。

像这样的东西

public class Square {
    private int top, bottom, left, right;

    public int getTop() {
        return top;
    }

    public void setTop(int top) {
        this.top = top;
    }

    public int getBottom() {
        return bottom;
    }

    public void setBottom(int bottom) {
        this.bottom = bottom;
    }

    public int getLeft() {
        return left;
    }

    public void setLeft(int left) {
        this.left = left;
    }

    public int getRight() {
        return right;
    }

    public void setRight(int right) {
        this.right = right;
    }
}

之后你可以使用更大或更小的方法来检查它们是否像这样重叠。

private boolean isOverlapping(Square first, Square second) {
    // If first is over second or under second.
    if (first.getTop() < second.getBottom() || first.getBottom() > second.getTop()) {
        // If First is to the left or to the right of second
        if (first.getLeft() > second.getRight() || first.getRight() < second.getLeft()) {
            // Return false
            return false;
        }
    }
    // Otherwise the two must be overlapping
    return true;
}