Java:将图像放置在形状上

Java:将图像放置在形状上,java,image,shape,Java,Image,Shape,我一直在开发一个简单的Java游戏,并且已经成功地使用了形状,但下一个重要步骤是使用图像。我想知道是否有一种方法,我可以简单地将一个图像放置在一个形状上,例如一个矩形,这将使过程更加容易,并且不需要我重新编写大部分代码 以下是我游戏的两个类供参考: 第一个班叫“飞鸟” 我知道这是一个巨大的请求,我想向所有回复的人和这里的精彩社区表示衷心的感谢:-)好的,不!不要这样使用static。呈现单个任务(即“菜单”、“游戏”等等)的设计目的构建视图不会在单个类中完成所有任务。不要使用keylister,

我一直在开发一个简单的Java游戏,并且已经成功地使用了形状,但下一个重要步骤是使用图像。我想知道是否有一种方法,我可以简单地将一个图像放置在一个形状上,例如一个矩形,这将使过程更加容易,并且不需要我重新编写大部分代码

以下是我游戏的两个类供参考:

第一个班叫“飞鸟”


我知道这是一个巨大的请求,我想向所有回复的人和这里的精彩社区表示衷心的感谢:-)

好的,不!不要这样使用
static
。呈现单个任务(即“菜单”、“游戏”等等)的设计目的构建视图不会在单个类中完成所有任务。不要使用
keylister
,这只是一场等待发生的火车失事,请改用。那么
图形#drawImage
有什么问题吗?也许你应该看看好的,不!不要这样使用
static
。呈现单个任务(即“菜单”、“游戏”等等)的设计目的构建视图不会在单个类中完成所有任务。不要使用
keylister
,这只是一场等待发生的火车失事,请改用。那么
图形#drawImage
有什么问题吗?也许你应该看看
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.Timer;

public class FlappyBird implements ActionListener, MouseListener, KeyListener {

    public static FlappyBird flappyBird;    
    public final int WIDTH = 800, HEIGHT = 800;    
    public Renderer renderer;    
    public Rectangle bird;    
    public ArrayList<Rectangle> columns;    
    public int ticks, yMotion, score;    
    public boolean gameOver, started;
    public Random rand;

    public FlappyBird() {
        JFrame jframe = new JFrame();
        Timer timer = new Timer(20, this);
        renderer = new Renderer();
        rand = new Random();
        jframe.add(renderer);
        jframe.setTitle("Flappy Bird");
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.setSize(WIDTH, HEIGHT);
        jframe.addMouseListener(this);
        jframe.addKeyListener(this);
        jframe.setResizable(false);
        jframe.setVisible(true);
        bird = new Rectangle(WIDTH / 2 - 10, HEIGHT / 2 - 10, 20, 20);
        columns = new ArrayList<Rectangle>();
        addColumn(true);
        addColumn(true);
        addColumn(true);
        addColumn(true);
        timer.start();
    }

    public void addColumn(boolean start) {
        int space = 300;
        int width = 100;
        int height = 50 + rand.nextInt(300);
        if (start) {
            columns.add(new Rectangle(WIDTH + width + columns.size() * 300, HEIGHT - height - 120, width, height));
            columns.add(new Rectangle(WIDTH + width + (columns.size() - 1) * 300, 0, width, HEIGHT - height - space));
        } else {
            columns.add(new Rectangle(columns.get(columns.size() - 1).x + 600, HEIGHT - height - 120, width, height));
            columns.add(new Rectangle(columns.get(columns.size() - 1).x, 0, width, HEIGHT - height - space));
        }
    }

    public void paintColumn(Graphics g, Rectangle column) {
        g.setColor(Color.green.darker());
        g.fillRect(column.x, column.y, column.width, column.height);
    }

    public void jump() {
        if (gameOver) {
            bird = new Rectangle(WIDTH / 2 - 10, HEIGHT / 2 - 10, 20, 20);
            columns.clear();
            yMotion = 0;
            score = 0;    
            addColumn(true);
            addColumn(true);
            addColumn(true);
            addColumn(true); 
            gameOver = false;
        }

        if (!started)
            started = true;
        else if (!gameOver)  {
            if (yMotion > 0)
                yMotion = 0;
            yMotion -= 10;
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        int speed = 10;    
        ticks++;    
        if (started) {
            for (int i = 0; i < columns.size(); i++) {
                Rectangle column = columns.get(i); 
                column.x -= speed;
            }    
            if (ticks % 2 == 0 && yMotion < 15)
                yMotion += 2;    
            for (int i = 0; i < columns.size(); i++) {
                Rectangle column = columns.get(i);
                if (column.x + column.width < 0) {
                    columns.remove(column);   
                    if (column.y == 0)
                        addColumn(false);
                }
            }    
            bird.y += yMotion;    
            for (Rectangle column : columns) {
                if (column.y == 0 && bird.x + bird.width / 2 > column.x + column.width / 2 - 10 && bird.x + bird.width / 2 < column.x + column.width / 2 + 10) {
                    score++;
                }    
                if (column.intersects(bird)) {
                    gameOver = true;    
                    if (bird.x <= column.x)
                        bird.x = column.x - bird.width;    
                    else
                        if (column.y != 0)
                            bird.y = column.y - bird.height;
                        else if (bird.y < column.height)
                            bird.y = column.height;
                }
            }   
            if (bird.y > HEIGHT - 120 || bird.y < 0)
                gameOver = true; 
            if (bird.y + yMotion >= HEIGHT - 120) {
                bird.y = HEIGHT - 120 - bird.height;
                gameOver = true;
            }
        }    
        renderer.repaint();
    }

    public void repaint(Graphics g) {
        g.setColor(Color.cyan);
        g.fillRect(0, 0, WIDTH, HEIGHT);    
        g.setColor(Color.orange);
        g.fillRect(0, HEIGHT - 120, WIDTH, 120); 
        g.setColor(Color.green);
        g.fillRect(0, HEIGHT - 120, WIDTH, 20);    
        g.setColor(Color.red);
        g.fillRect(bird.x, bird.y, bird.width, bird.height);   
        for (Rectangle column : columns)
            paintColumn(g, column);    
        g.setColor(Color.white);
        g.setFont(new Font("Arial", 1, 100));    
        if (!started)
            g.drawString("Click to start!", 75, HEIGHT / 2 - 50);    
        if (gameOver)
            g.drawString("Game Over!", 100, HEIGHT / 2 - 50);    
        if (!gameOver && started)
            g.drawString(String.valueOf(score), WIDTH / 2 - 25, 100);
    }

    public static void main(String[] args) {
        flappyBird = new FlappyBird();
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        jump();
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_SPACE)
            jump();
    }

    @Override
    public void mousePressed(MouseEvent e){
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e){ 
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
    }

}
import java.awt.Graphics;
import javax.swing.JPanel;

public class Renderer extends JPanel {
    private static final long serialVersionUID = 1L;

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        FlappyBird.flappyBird.repaint(g);
    }

}