【问题标题】:How do I remove the red rectangle when it collides with the cyan one?当红色矩形与青色矩形碰撞时,如何删除它?
【发布时间】:2015-02-28 08:35:04
【问题描述】:

这是我的代码:

import java.awt.*;
import java.awt.event.*;
import java.util.*;

import javax.swing.*;

public class Draw extends JComponent implements KeyListener {

    Random r = new Random();

    int x = 0;
    int y = 0;
    int a = 5 * r.nextInt(150);
    int b = 5 * r.nextInt(90);

    Image img1 = Toolkit.getDefaultToolkit().getImage("C:/Users/Administrator/eclipse/My Projects/Game/src/bluebackground1.png");

    public Draw(){
        addKeyListener(this);
        setFocusable(true);
    }

    //display
    public void paint(Graphics g){
        g.drawImage(img1, 0, 0, this);

        g.setColor(Color.CYAN);
        g.fill3DRect(x, y, 50, 50, true);

        g.setColor(Color.RED);
        g.draw3DRect(a, b, 50, 50, true);

        g.setColor(Color.BLACK);
        g.drawLine(0, 500, 800, 500);

        g.setColor(Color.BLACK);
        g.drawString("Press R to restart the game", 10, 540);
        g.drawString("Use arrow keys to move", 600, 540);

        if(x == a && y == b){
            g.setColor(Color.BLACK);
            g.setFont(new Font("", Font.PLAIN, 50));
            g.drawString("Victory", 300, 550);
        }
    }

    //controls
    public void keyPressed(KeyEvent k) {
        if(k.getKeyCode() == KeyEvent.VK_UP){
            y -= 5;
        } else if(k.getKeyCode() == KeyEvent.VK_DOWN){
            y += 5;
        } else if(k.getKeyCode() == KeyEvent.VK_LEFT){
            x -= 5;
        } else if(k.getKeyCode() == KeyEvent.VK_RIGHT){
            x += 5;
        }

        if(k.getKeyCode() == KeyEvent.VK_R){
            restart();
        }

        //border
        if(x < 0){
            x += 5;
        } else if(x > 745){
            x -= 5;
        } else if(y < 0){
            y += 5;
        } else if (y > 450){
            y -= 5;
        }

        repaint();
    }

    public void keyReleased(KeyEvent k) {}

    public void keyTyped(KeyEvent k) {}

    //restart function
    public void restart(){
        x = 0;
        y = 0;
        a = 5 * r.nextInt(150);
        b = 5 * r.nextInt(90);
    }
}

我想要的是当可移动的青色矩形进入不可移动的红色矩形内时,红色矩形永久消失,因为游戏还没有结束,青色矩形将不得不移动更多。

当红色矩形与青色矩形碰撞时,如何将其移除?

【问题讨论】:

  • 请对代码和代码 sn-ps、HTML/XML 等结构化文档或输入/输出使用代码格式。为此,请选择文本并单击消息发布/编辑表单顶部的{} 按钮。

标签: java swing graphics keylistener


【解决方案1】:

Shape 实例存储在List 中。在绘画时,迭代列表并绘制每一个。删除一个形状后,将其从列表中删除并调用repaint()

【讨论】:

  • @mKorbel 哎呀!是的,我的意思是一个集合,可以在ArrayListVector 中找到,而不是GUI 组件。 :P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2013-12-28
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多