2015-05-01 2 views
0

Я искал всю веб-страницу, пытаясь найти решение, но в конце концов я просто оказался более запутанным и расстроенным. Я пытаюсь заставить мое весло двигаться (paddle_y). Paddle не нуждается в координате x, и она просто должна двигаться вверх и вниз по вертикальной линии. Я понятия не имею, какой синтаксис мне нужен для mouseListener, чтобы заставить мое весло двигаться. пожалуйста, укажите пример или решение, если это возможно. Спасибо тонну, любая помощь приветствуется.Добавление MouseMotionListener в paddle (Java Pong Game)

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.event.MouseMotionListener; 
import java.awt.event.MouseEvent; 


public class PongGame extends JFrame implements Runnable, MouseMotionListener { 


    int ball_x, ball_y, ball_dx, ball_dy; 
    int ball_r; 

    int x_left, x_right, y_top, y_bottom; 

    int paddle_y = 30; 


    /** 
    * Constructor 
    */ 
    public PongGame(){ 
    init(); 
    } 

    /** 
    * UI 
    */ 
    protected void init(){ 
    this.setSize(300,300); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  


    int curX = -1, curY = -1; 

    ball_x = this.getWidth()/2; 
    ball_y = this.getHeight()/2; 

    ball_dx = ball_dy = 2; 

    ball_r = 20; 

    this.setVisible(true); 
    getFocus(this); 

    x_left = this.getInsets().left; 
    x_right = this.getWidth() - this.getInsets().right - ball_r; 
    y_top = this.getHeight() - this.getInsets().top + ball_r/3; 
    y_bottom = this.getInsets().bottom + ball_r; 

    addMouseMotionListener(this); 

    } 

    public void mouseMoved(MouseEvent e) { 

     //help 
    } 


    public void mouseDragged(MouseEvent e) { 
     //help 
    } 


    /** 
    * helper method which we use to get the focus 
    */ 
    public void getFocus(final JFrame frame) 
    { 
     EventQueue.invokeLater(new Runnable() { 
       public void run() { 
        frame.requestFocus(); 
       } 
     }); 
    } 

    /** 
    * implementation of the Runnable interface to be able to move the ball, etc. 
    */ 
    public void run(){ 

    while(true){ 

     ball_x += ball_dx; 
     if(ball_x <= x_left || ball_x >= x_right){ 
     ball_dx *=-1; 
     ball_x += (2*ball_dx); 
     } 

     ball_y += ball_dy; 
     if(ball_y <= y_bottom || ball_y >= y_top){ 
     ball_dy *=-1; 
     ball_y += (2*ball_dy); 
     } 

     repaint(); 

     try{ 
     Thread.sleep(50); 
     }catch(InterruptedException ex){ 
     System.out.println(ex); 
     } 
    } 
    } 

    /** 
    * all rendering occurs here 
    */ 
    public void paint(Graphics g){ 

    //Color paddleOne; 
    //paddleOne = new Color(0); 

    g.setColor(Color.white); 
    g.fillRect(0,0,this.getWidth(),this.getHeight()); 

    g.setColor(Color.black); 
    g.fillOval(ball_x,ball_y, ball_r, ball_r); 

    g.setColor(Color.black); 
    g.fillRect(0,paddle_y,20,70); 
    } 

    /** 
    * entry point into the program 
    */ 
    public static void main(String[] args){ 
    // create the class 
    PongGame application = new PongGame(); 
    new Thread(application).start(); 

    } 

} 

весла:

int paddle_y = 30; 



g.setColor(Color.black); 
g.fillRect(0,paddle_y,20,70); 




public void mouseMoved(MouseEvent e) { 

     //help 
    } 


    public void mouseDragged(MouseEvent e) { 
     //help 
    } 
+1

Эй, вы можете пойти сюда и получить все. https://github.com/Jaryt23/PongTutorial/tree/master/pong –

+1

Взгляните на [документацию для MouseEvent] (https://docs.oracle.com/javase/8/docs/api/java/awt /event/MouseEvent.html). Как любой из этих методов выглядит так, что они могут предоставлять данные, которые вы можете использовать, чтобы изменить значение поля 'paddle_y'? – VGR

+0

Я посмотрю на эти документы. большое спасибо. очень признателен. – reckless

ответ

1

Paddle класса необходим экземпляр JFrame класса для того, чтобы добавить слушатель мыши. Если передать JFrame объект в конструктор, вы можете использовать следующий код:

public class Paddle { 
    private JFrame frame; 
    private int paddle_y; 
    public Paddle(JFrame frame) { 
     this.frame = frame; 
     this.paddle_y = 30; //Or whatever number you want 
     frame.addMouseMotionListener(new MouseMotionListener() { 
      public void mouseMoved(MouseEvent e) { 
       Paddle.this.paddle_y = e.getY(); //When the mouse is moved, it will call on this function to change the Paddle.paddle_y variable. 
      } 

      public void mouseDragged(MouseEvent e){} //This reacts when the mouse is clicked, moved, then released. 
    } 
} 

Это должно заменить класс Paddle, и он должен изменить переменную paddle_y при перемещении мыши.

EDIT: Если вы не хотите, чтобы создать новый класс, поместить это в класс JFrame:

int paddle_y; 
this.addMouseMotionListener(new MouseMotionListener() { 
       public void mouseMoved(MouseEvent e) { 
        paddle_y = e.getY(); //When the mouse is moved, it will call on this function to change the paddle_y variable (Within the JFrame class). 
       } 

Тогда вы можете позвонить по переменной paddle_y при визуализации.

+0

im пытается добавить это без класса, но im сталкивается с большим количеством ошибок. любая идея, как это сделать без нового класса? – reckless

+1

@Savaged используйте приведенное выше изменение – HyperNeutrino

Смежные вопросы