在Java中拖动行 我在屏幕中间创建了两条线,这是一个正符号,我只想在我点击它时拖动正符号,但是它只在我点击屏幕上的任何地方时才起作用,我希望当我点击它时,这个符号才会被拖动,而不是当我点击屏幕上其他地方的时候。我希望任何人都能帮助我,我可以做什么,使这项工作。这是下面的代码
您可以尝试使用图像而不是线条,并使用WASD。我的游戏就是这么用的。在Java中拖动行 我在屏幕中间创建了两条线,这是一个正符号,我只想在我点击它时拖动正符号,但是它只在我点击屏幕上的任何地方时才起作用,我希望当我点击它时,这个符号才会被拖动,而不是当我点击屏幕上其他地方的时候。我希望任何人都能帮助我,我可以做什么,使这项工作。这是下面的代码,java,line,shapes,mouseclick-event,mousemotionlistener,Java,Line,Shapes,Mouseclick Event,Mousemotionlistener,您可以尝试使用图像而不是线条,并使用WASD。我的游戏就是这么用的。ourFrame.addKeyListener(新的KeyListener(){ ourFrame.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { System.out.println("Key pressed
ourFrame.addKeyListener(新的KeyListener(){
ourFrame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("Key pressed code=" + e.getKeyCode() + ", char=" + e.getKeyChar());
push = e.getKeyCode();
if(push == 87){//w
if(y > -9){//blocker
picLabel.setBounds(x, y, 80, 40);
y = y + -10;
// System.out.println("Cubie is going up at, " + x + "," + y);
}}
if(push == 65){//a
if(x > -29){//blocker
picLabel.setBounds(x, y, 80, 40);
x = x + -10;
// System.out.println("Cubie is going left at, " + x + "," + y);
}}
if(push == 83){//s
if(y < 421){//blocker
picLabel.setBounds(x, y, 80, 40);
y = y + 10;
// System.out.println("Cubie is going down at, " + x + "," + y);
}}
if(push == 68){//d
if(x < 621){//blocker
picLabel.setBounds(x, y, 80, 40);
//System.out.println("Cubie is going right at, " + x + "," + y);
x = x + 10;
}}
@凌驾
public void keyTyped(KeyEvent e){
}
@凌驾
按下公共无效键(按键事件e){
System.out.println(“按键代码=“+e.getKeyCode()+”,char=“+e.getKeyChar());
push=e.getKeyCode();
如果(推==87){//w
如果(y>-9){//blocker
picLabel.setBounds(x,y,80,40);
y=y+-10;
//System.out.println(“Cubie在“+x+”,“+y”处上升);
}}
如果(推==65){//a
如果(x>-29){//blocker
picLabel.setBounds(x,y,80,40);
x=x+-10;
//System.out.println(“立方体在“+x+”,“+y”处向左移动);
}}
如果(推==83){//s
if(y<421){//阻断剂
picLabel.setBounds(x,y,80,40);
y=y+10;
//System.out.println(“立方体在“+x+”,“+y”处下降);
}}
如果(推==68){//d
if(x<621){//阻断剂
picLabel.setBounds(x,y,80,40);
//System.out.println(“Cubie在“+x+”,“+y”处向右移动);
x=x+10;
}}
有几种方法可以做到这一点,但对我来说,我会尝试将这两条线组合成一个形状,这将允许你计算它们的粘合盒,然后进行简单的命中测试
例如
@Override
public void mouseDragged(MouseEvent e) {
GeneralPath gp = new GeneralPath();
gp.append(lineMn, false);
gp.append(lineMp, false);
Point p = e.getPoint();
if (!gp.getBounds().contains(p)) {
return;
}
现在,请注意,“这个”实现不是很有效。相反,我会在早期将线条组合成单个形状,然后继续移动它。但是如果我使用图像,它仍然是一样的,我只想在单击正号时拖动线条,而不是在面板上的任何其他位置
@Override
public void mouseDragged(MouseEvent e) {
GeneralPath gp = new GeneralPath();
gp.append(lineMn, false);
gp.append(lineMp, false);
Point p = e.getPoint();
if (!gp.getBounds().contains(p)) {
return;
}