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