当前位置: 首页 > 知识库问答 >
问题:

在java中,如何以特定角度向前移动形状?

莫典
2023-03-14

我试图创建一个游戏,在其中我可以旋转矩形,并将其向前或向后移动,当我按下右键时,它会顺时针旋转,如果我按下左键,它会逆时针旋转,但我有一个问题,如果我向上或向下移动,它只会在我按下右键和左键时旋转相同,但我预期它们会向上或向下移动,我已经看过其他的程序,并试图复制他们的方法,但我仍然错过了一些东西,有人请帮助,提前感谢

下面是我的确切代码:

 public class Rotate extends JPanel implements ActionListener,KeyListener{
 Timer t = new Timer(20,this); 
 boolean right=false;
 boolean left=false;
 boolean up=false;
 boolean down=false;
 Rectangle tank;
 int tankx=30;
 int tanky=50;
 double a;
 int angle;

 Rotate()
 {

  JFrame f = new JFrame();
  f.add(this);
  f.addKeyListener(this);
  f.setSize(1000,1000);
  f.setVisible(true);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


      tank = new Rectangle(400,400,30,50);

}
public static void main(String[] args) {
new Rotate();
}
int i;
 public void paint(Graphics g) {

   super.paint(g);
   Graphics2D g2d =(Graphics2D)g;


   g2d.rotate(a,tank.getWidth()+tankx/2,tank.getHeight()+tanky/2);
   g.setColor(Color.red);
   g.fillRect(tankx,tanky,tank.width,tank.height);

   if(angle>360)
   {
       angle=0;

   }
   else if(angle<0)
   {
       angle=360;

   }
    a= Math.toRadians(angle);   

    System.out.println("x");
         t.start();
}





@Override
public void actionPerformed(ActionEvent e) {

 if(right==true)
 {

       angle+=4;

 }
 else if(left==true)
 {


      angle-=4; 

 }   
 else if(down==true)
 {
  angle-=4;
  tank.x-=Math.cos(a);
  tank.y-=Math.sin(a);   

 }
 else if(up==true)
 {
  angle+=4;
  tank.x+=Math.cos(a);
  tank.y+=Math.sin(a);   

 }
    repaint();
     }



@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {
  if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  {
      right=true;
  }
  else if(e.getKeyCode()==KeyEvent.VK_LEFT)
  {
      left=true;
  }
  else if(e.getKeyCode()==KeyEvent.VK_UP)
  {
     up=true;
  }
  else if(e.getKeyCode()==KeyEvent.VK_DOWN)
  {
      down=true;
  }
}

@Override
public void keyReleased(KeyEvent e) {
  right=false;
  left=false;
  up=false;
  down=false;
}

}

暂时还没有答案

 类似资料:
  • 问题内容: 因此,我有一个应用程序可以根据按下键盘上的哪个按钮成功地向左,向右,向上或向下移动球(椭圆)。但是,我无法使球倾斜移动。我试图通过说如果用户按住2个方向键,则球将沿对角线进入。例如,如果他们单击向左键和向上键,则我希望球沿西北方向移动。如果你们中有人发现问题的根源,我将非常感谢您的帮助! 发动机 CircleComponent 问题答案: 因为键事件将仅报告触发事件的最后一个键,所以您

  • 问题内容: 假设我有一个(x,y)对于一条线的起点始终是相同的,并且(x,y)对于同一条线的终点是变化的。该行也总是40px长。在程序开始时,该线以垂直方向开始(称为0度)。根据用户输入,我需要通过仅更改端点(x,y)从其原点开始重画特定角度的线条。 如果需要,可以考虑使用更多食物: 我很想计算这个并使它在Java中工作。我可以使数学基于圆弧段的弧长来计算点,但是我不知道如何使Java做到这一点。

  • 当我触摸屏幕时,身体会逐渐移动,当触摸点靠近时,身体会变慢。我的问题是我想以恒定的速度移动身体,假设给定的速度是60 kpH,身体应该以60 kpH的速度开始移动,直到接触点。我在想解决方案是在屏幕上触摸,获得角度,然后使用该角度移动身体,然后增加速度以获得正确的速度?

  • 在AnyLogic 7中,是否有任何功能可用于在代理所面向的方向(角度)上移动代理?有多种方法可以移动到特定的单元、代理和特定的方向(东、西、北、南…),但我怎样才能根据特工面对的角度推动他前进呢? 类似于NetLogo的功能。

  • 问题内容: 我做了一个绘制椭圆并相互链接的迷你代码,现在我尝试移动椭圆(圆),但是我在编码时遇到了问题 移动两个圆圈,并且直线一定不能移动(Graph节点),请帮帮我,谢谢:)更新后(感谢MadProgrammer),现在我可以移动所有 图形了 问题答案: 基本上,因为可以使用而不是使用 这将确保整个组件被重新粉刷。 虽然我不反对使用repaint(int, int),因为您的绘画过程相对简单,但

  • 我们的OOP老师给我布置了一个作业。虽然我的代码看起来很好,但我仍然面临这个问题。 我必须从用户那里获取三角形顶点的坐标,并且必须判断它是否是一个r直角三角形。所以我简单地用毕达哥拉斯定理来求它,我们都知道用条件:h*h=b*b+p*p 但令人惊讶的是,这对某些特定的直角三角形不起作用。这里有一个这样的三角形: 顶点A:(x,y)=(1,3) 顶点B:(x,y)=(1,1) 顶点C:(x,y)=(