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

使用箭头键进行aim的Java处理

岳嘉石
2023-03-14

我正在使用Java Processing 3制作一个两人坦克游戏。下面是我的炮塔代码。目前我有炮塔的瞄准跟随鼠标在tDir中,我希望能够使用向上和向下箭头移动瞄准从0到90度向上和向下。

我该怎么做呢?多谢了。

/*
Uzair
*/

PVector mPos; //mouse position
PVector tPos; //position of turret
PVector tDir; //the firing direction of the turret
 int gravMult = 3;

void setup() {
  size(1200, 600);
  init();
}

void init() {
  //PVector initializations
  mPos = new PVector(); //zero til mouse x and y exist
  tPos = new PVector(width/8, height);
  tDir = new PVector(); //
}
void draw() { 
  //clear last frame
  background(100,100,140);

  //check keys to see if there is new key input for turret
  if (keyPressed){
    if (key == 'w'){
      tDir.y -= 10;
    }
    else if (key == 's'){
      tDir.y += 10;
    }
  }

  mPos.set(mouseX, mouseY);
  tDir = PVector.sub(mPos, tPos);
  tDir.normalize();
  tDir.mult(50);

  //draw
  fill(255);  
  ellipse(tPos.x, tPos.y, 40, 40);
  strokeWeight(5);
  line(tPos.x, tPos.y, tPos.x + tDir.x, tPos.y + tDir.y);
  fill(255, 0, 0);
  ellipse(tPos.x + tDir.x, tPos.y + tDir.y, 10, 10);
}

共有1个答案

姜明贤
2023-03-14

从0度到90度上下瞄准

这听起来像是增加一个角度/旋转,而不是像当前一样增加y位置。

你需要做极坐标(角度/半径)到笛卡尔坐标(x,y)的转换。

x = cos(angle) * radius
y = sin(angle) * radius
tDir.x = cos(angle) * 50;
tDir.y = sin(angle) * 50;
PVector mPos; //mouse position
PVector tPos; //position of turret
PVector tDir; //the firing direction of the turret
 int gravMult = 3;
//angle in radians
float angle = 0;

void setup() {
  size(1200, 600);
  init();
}

void init() {
  //PVector initializations
  mPos = new PVector(); //zero til mouse x and y exist
  tPos = new PVector(width/8, height * .75);
  tDir = new PVector(); //
}
void draw() { 
  //clear last frame
  background(100,100,140);

  //check keys to see if there is new key input for turret
  if (keyPressed){
    if (key == 'w'){
      angle -= 0.1;
      tDir = PVector.mult(PVector.fromAngle(angle),50);
    }
    else if (key == 's'){
      angle += 0.1;
      tDir = PVector.mult(PVector.fromAngle(angle),50);
    }
  }else if(mousePressed){
    mPos.set(mouseX, mouseY);
    tDir = PVector.sub(mPos, tPos);
    tDir.normalize();
    tDir.mult(50);
  }
  //draw
  fill(255);  
  ellipse(tPos.x, tPos.y, 40, 40);
  strokeWeight(5);
  line(tPos.x, tPos.y, tPos.x + tDir.x, tPos.y + tDir.y);
  fill(255, 0, 0);
  ellipse(tPos.x + tDir.x, tPos.y + tDir.y, 10, 10);
}
 类似资料:
  • 我现在正在实验JavaFX,教自己如何使用箭头键移动文本和项。我做了一个程序,如果按下箭头键,就可以简单地在舞台上移动文本。 我想使一个圆圈移动我的窗格,而不是文本。要使用箭头键移动我的圆圈,我必须做哪些更改?

  • 问题内容: 我在JScrollPane中有一个JTextArea组件,并且文本区域不可编辑。我想使用向上和向下箭头键滚动文本区域(即,按箭头键将文本区域滚动一行)。任何想法如何实现这一目标? 问题答案: 是的,键绑定是必经之路,但是您不一定总是需要创建自己的动作。Swing组件带有您经常可以重用的默认操作。 有关这些操作的完整列表,请参见键绑定。 现在您知道了动作名称,您可以将其绑定到keyStr

  • 请先按(按住)箭头键,然后按非箭头键,测试以下代码。至少在Mac中,你会看到箭头键不断地应用它们的功能,而其他键则没有。有没有人知道如何使其他键在处理过程中连续应用(即不通过改变OSX的功能)?

  • 问题内容: 我正在用Java写一个简单的程序,其中包括一个KeyListener,下面是覆盖它们的KeyTyped方法: 当我键入除箭头键以外的其他任何字符(例如“ a”)时,它将按原样打印。但是,当我键入小键盘箭头键时,它只会打印,而当我键入标准箭头键时,它根本不会打印任何内容。这可能是因为我在笔记本电脑上,还是我在某个地方犯了一个愚蠢的错误? 问题答案: 是的,你将看到箭头键响应keyPres

  • 我想知道如何在ReactJS上使用setTimeout(),因为我正在这样做: 它调用两次函数this.reqMaq()。 如何防止第一次通话?在时间结束后继续打电话? 这是组件: 谢谢你。

  • 问题内容: 我正在尝试通过keyEvent向左移动一个圆圈。到目前为止,圆已在窗口上绘制,但不会向左移动!我觉得问题是我在容器中添加了Window()构造函数。在控制台上没有输出告诉我它正在工作。因此,我认为它甚至不会到达KeyEvent类。这是我的代码: 问题答案: 实际上,这是您要添加到的内容,但重点是,因此,当您键入内容时,该内容将转到与类无关的内容。因此,为了克服它,你只需要调用的类的对象