Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从JFrame的每个角移动矩形_Java_Swing_Graphics_Jframe_Awt - Fatal编程技术网

Java 如何从JFrame的每个角移动矩形

Java 如何从JFrame的每个角移动矩形,java,swing,graphics,jframe,awt,Java,Swing,Graphics,Jframe,Awt,我正在用JavaAWT编写一个游戏。我画了4个矩形,我想把它们从一个角移到另一个角。就像我在四个角有四个矩形一样,每个矩形都将对角移动到另一个角。我已经创建了四个矩形,但我只能移动一个。请查找下面的代码。请帮助 import static java.awt.Color.black; import static java.awt.Color.blue; import static java.awt.Color.green; import static java.awt.Color.red; imp

我正在用JavaAWT编写一个游戏。我画了4个矩形,我想把它们从一个角移到另一个角。就像我在四个角有四个矩形一样,每个矩形都将对角移动到另一个角。我已经创建了四个矩形,但我只能移动一个。请查找下面的代码。请帮助

import static java.awt.Color.black;
import static java.awt.Color.blue;
import static java.awt.Color.green;
import static java.awt.Color.red;
import static java.awt.Color.yellow;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Polygon;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import javax.swing.*;

public class Buddy extends JPanel implements ActionListener,KeyListener{

    Timer t=new Timer(5,this);
    double x=0,y=0,velX=2,velY=2;
    //int h=300,w=300,velH=1,velW=1,h2=0,w2=320,h3=340,w3=0,velH2=1,velW2=1;
    int h=0,w=0,velH=1,velW=1,h2=0,w2=0,h3=0,w3=0,velH2=1,velW2=1,h4=0,w4=0,velH3=1,velW3=1,velH4=1,velW4=1;
     Ellipse2D circle;

     Rectangle rect;

        Rectangle rect2,rect3,rect4;
public Buddy()
{
    t.start();
    addKeyListener(this);
    setFocusable(true);
    setFocusTraversalKeysEnabled(false);

}
 public boolean doAreasCollide(Area area1, Area area2) {
        boolean collide = false;

        Area collide1 = new Area(area1);
        collide1.subtract(area2);
        if (!collide1.equals(area1)) {
            collide = true;
        }

        Area collide2 = new Area(area2);
        collide2.subtract(area1);
        if (!collide2.equals(area2)) {
            collide = true;
        }

        return collide;
    }

    @Override
    public void paintComponent(Graphics g)
    {
     super.paintComponent(g);
     Graphics2D g2=(Graphics2D)g;
     Graphics2D g3=(Graphics2D)g;
        circle=new Ellipse2D.Double(x+150,y+150,40,40);
      // Ellipse2D circle2=new Ellipse2D.Double(x,y,60,60);
        g2.setPaint(yellow);
        g2.fill(circle);
         g2.setPaint(red);
        rect = new Rectangle(h,w,80,80);
          g2.fill(rect);

           rect2 = new Rectangle(h2,w2+280,80,80);
           rect3 = new Rectangle(h3+300,w3,80,80);
          rect4 = new Rectangle(h4+310,w4+280,80,80);
        g2.fill(rect2);
       // g2.setPaint(blue);
        g2.fill(rect3);
        //g2.setPaint(red);
       g2.fill(rect4);
         //g2.setPaint(green);

        t.start();
    }
    public void pause()
    {
        velX=0;
        velY=0;
        velH=0;
        velW=0;
    }
    public void start()
    {
        velX=2;
        velY=2;
        velH=1;
        velW=1;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //x<0||x>560||x==h||x==w||

       /* if(x<0||x>360)
        {
            velX=0;

        }
        if(y<0||y>360)
        {
            velY=-velY;
        }
        if(h<0||h>320)
        {
            velH=-velH;
        }
        if(w<0||w>320)
        {
            velW=-velW;
        }


    x+=velX;
    y+=velY;
    h-=velH;
    w-=velW;
    h2-=velH2;
    w2-=velW2;*/

        if(h<0||h>310)
        {
            velH=-velH;
        }
        if(w<0||w>310)
        {
            velW=-velW;
        }

         if(h2>0||h2<300)
        {
            velH2=-velH2;
        }
        if(w2>280||w2<0)
        {
            velW2=+velW2;
        }





        h+=velH;
        w+=velW;
        h2+=velH2;
        w2-=velW2;
        h3-=velH3;
        w3+=velW3;
        h4-=velH4;
        w4-=velW4;
        x+=velX;
    y-=velY; 


    repaint();
    }

    @Override
    public void keyTyped(KeyEvent e) {




    }

    @Override
    public void keyPressed(KeyEvent e) {
     int code=e.getKeyCode();
        if(code==KeyEvent.VK_SPACE);
        {
            pause();
        } 
    }

    @Override
    public void keyReleased(KeyEvent e) {
    int code=e.getKeyCode();
        if(code==KeyEvent.VK_0);
        {
            start();
        } 
    }



}

你没有问过问题,也没有说你需要什么帮助。与其新建矩形,为什么不进行矩形转换?@AndyTurner sry我不清楚,我想将矩形从一个角移动到另一个角,中间有一个圆,它正在移动,如果碰到矩形,它应该停止。这正是我想要的。我不能再移动两个长方形的桨了。。那个@安德鲁:是的,我从你的一个stackoverflow帖子上拿了一块……这很有帮助……谢谢: