【问题标题】:How to add keyboard listeners into GraphicsProgram如何将键盘侦听器添加到 GraphicsProgram
【发布时间】:2020-07-01 06:35:56
【问题描述】:

所以我想制作一个射击游戏,其中一个物体射击东西,我想添加键盘监听器(wasd,箭头键)。谁能告诉我实现键盘监听器的最佳方法是什么?我的最终目标是也能够使用键盘(WASD 和箭头键)移动绿色圆圈。

import acm.graphics.*; 
import acm.program.*; 
import java.awt.*; 
import java.awt.event.*; 
public class survivor2 extends GraphicsProgram { 
   
  
  
  public static final int APPLICATION_WIDTH = 800;
  public static final int APPLICATION_HEIGHT = 500;
  
  
  
  GOval redBall, greenball; 
  GObject gobj; 
  GLabel timeLabel;
  GRectangle redBallbox, greenballbox;
   
  double lastX, lastY; 
  int redBallXJump, redBallYJump, time, leveltime, speed;

  
  final int DIAM = 50;
  final int WAIT = 2;
  
  
  public void init( ) { 
    
    
    time = 0;
    leveltime = 0;
    timeLabel = new GLabel("Time survived: " + time);
    timeLabel.setFont("*-BOLD-16");
    add(timeLabel, 0, 16);
    timeLabel.setVisible(false);
    
    redBallXJump = 1;
    redBallYJump = 1;
    
    speed = 1;
    
    redBall = new GOval(1, 1, DIAM, DIAM); 
    redBall.setFilled(true); 
    redBall.setColor(Color.RED); 
    add(redBall); 
    greenball = new GOval(300, 115, 100, 70); 
    greenball.setFilled(true); 
    greenball.setColor(Color.GREEN); 
    add(greenball); 
    
    
    addMouseListeners( ); 
    waitForClick();
    
    
    
  } //init 
  
  public void mousePressed(MouseEvent e) { 
    lastX = e.getX( ); 
    lastY = e.getY( ); 
    gobj = getElementAt(lastX, lastY); 
    if (gobj != null) { 
      gobj.sendToFront(); } 
  } //mousePressed 
  
  public void mouseDragged(MouseEvent m) { 
    if (gobj != null) { 
      int xDisplacement = (int) (m.getX( ) - lastX); 
      int yDisplacement = (int) (m.getY( ) - lastY); 
gobj.move(xDisplacement, yDisplacement); 
lastX = m.getX( ); 
lastY = m.getY( ); } 
} //mouseDragged 
public void run( ) { 
  
  
  while(true){
    
    GRectangle redBallbox = redBall.getBounds();
    GRectangle greenballbox = greenball.getBounds();
    
    
    pause(WAIT);
    time = time + WAIT;
    leveltime = leveltime + WAIT;
    
    if (leveltime == 10000){
      
          
          
    }
    
    
          if (redBallbox.intersects(greenballbox)==true){
            timeLabel.setVisible(true);
            timeLabel.setLabel("Time survived: " + time/1000+ " seconds");
            break;
          }
    
    
        if (redBall.getY( ) <= 0) //at top of window?
            {
                 redBallYJump = 1;
            }
        else if (redBall.getY( )+DIAM >= APPLICATION_HEIGHT) //at bottom?
            {
                 redBallYJump = -1;
            }
        else if (redBall.getX( ) <= 0) //at left?
            {
                 redBallXJump = 1;
            }
         else if (redBall.getX( )+DIAM >= APPLICATION_WIDTH) //at right?
            {
                 redBallXJump = -1;
            }
         redBall.move(redBallXJump, redBallYJump);     
    
    
  }
    
      
    
} 
}

【问题讨论】:

    标签: java


    【解决方案1】:

    看这里:key listener with acm.graphics

    您基本上只需将此代码复制到您的课程中:

    @Override
    public void run() {
        addKeyListeners(new MyKeyListener());
    }
    
    private class MyKeyListener implements KeyListener {
    
        @Override
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();
            if (keyCode == KeyEvent.VK_P) {
                System.out.println("Key 'P' has been pressed!");
            }
        }
    
        @Override
        public void keyReleased(KeyEvent e) { /* Empty body */ }
    
        @Override
        public void keyTyped(KeyEvent e) { /* Empty body */ }
    
    }
    

    处理keyPressed() 函数内的按键操作。

    【讨论】:

      猜你喜欢
      • 2013-06-29
      • 2017-01-06
      • 1970-01-01
      • 2018-07-12
      • 2016-08-21
      • 2022-08-03
      • 2013-02-17
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多