swing Java方法应该检查图形是否不工作
我的“检查触摸”方法不起作用。假设它改变了圆的位置,并在正方形和圆接触时给你一个点。当它们接触时,它会通过检查位置是否足够靠近来感知。程序的其余部分运行平稳。它有一个与箭头一起移动的正方形
import java.awt.Graphics;
public class RunPaintGUI extends JFrame implements KeyListener{
int x = 30;
int y = 30;
Random randomgenerator = new Random();
int a = randomgenerator.nextInt(1220);
int b = randomgenerator.nextInt(700);
public static void main(String[] args){
RunPaintGUI RunPaintGUI = new RunPaintGUI();}
public RunPaintGUI(){
this.setSize(1275, 775);
this.setResizable(false);
this.setVisible(true);
this.setTitle("game")
this.addKeyListener(this);
}
public void paint(Graphics g){
super.paint(g);
g.fill3DRect(x,y, 60, 60, true);
g.fillOval(a, b, 50, 50);
g.drawString("score: " + score, 600, 50);
}
public void checkiftouching(){
if ((a - x) < 70){
if ((a -x) > -70){
if ((b - y) < 70){
if ((b - y) > -70){
System.out.println("you win");
a = randomgenerator.nextInt(1220);
b = randomgenerator.nextInt(720);
repaint();
score = score + 1;
}}}}}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT){
x = x - 10;
repaint();
else if (e.getKeyCode() == KeyEvent.VK_RIGHT){
x = x + 10;
repaint();
else if (e.getKeyCode() == KeyEvent.VK_UP){
y = y - 10;
repaint();
else if (e.getKeyCode() == KeyEvent.VK_Left){
y = y + 10;
repaint();
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e {
// TODO Auto-generated method stub
}
# 1 楼答案
听起来你需要一个智能手机在游戏中常用于检测碰撞的hitbox可以在您的场景中使用。hitbox只是一个矩形,你不画它,但仍然跟踪它的位置。你应该用一个Rectangle作为一个点击框。如果你想用椭圆来表示你的圆环,尽管你可以用Ellipse2D。虽然如果你这样做,你将不得不使用Rectangle2D
你的
checkiftouching()
方法在hitbox中变得简单多了如果选择使用
Ellipse2D
,则必须这样声明:然后设置x坐标:
或者y坐标: