【发布时间】:2018-05-16 23:20:59
【问题描述】:
我正在制作一个简单的 Java 乒乓球游戏,其中有一个球拍和一个球。但是,我成功地在球拍上实现了一个 mouseWheel 来移动。我想改为使用 mouseDragged 事件。我是 Java 新手,这些 mouseEvents 真的很令人困惑。
这是我的球拍课:
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
public class Racquet {
private static final int Y = 330;
private static final int HEIGHT = 10;
int x = 0;
int xa = 0;
static int WIDTH = 60;
private Game game;
public Racquet(Game game) {
this.game = game;
}
public Racquet(Game game, int WIDTH) {
this.WIDTH = WIDTH;
}
public void move() {
if (x + xa > 0 && x + xa < game.getWidth() - WIDTH)
x = x + xa;
}
public void paint(Graphics2D g) {
g.fillRect(x, Y, WIDTH, HEIGHT);
}
public void keyReleased(KeyEvent e) {
xa = 0;
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT)
xa = -1;
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
xa = 1;
}
public Rectangle getBounds() {
return new Rectangle(x, Y, WIDTH, HEIGHT);
}
public int getTopY() {
return Y;
}
public void mouseDragged(MouseEvent m) {
xa = 0;
}
}
这是我的“游戏”类,我也尝试在其中实现球拍:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent m) {
racquet.mouseDragged(m);
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
【问题讨论】:
-
从概念上讲,这个想法并不难。您有一个标记开始位置的“按下”点和一个标记当前位置的“拖动”位置,困难在于,您需要定义一个“偏移量”,它定义了鼠标“按下”点之间的差异“以及你所拖动的东西的起源。因此,当“拖动”甚至发生时,您可以将“偏移”应用于“当前”位置,这将成为您拖动的原点 - 像泥巴一样清晰:P
-
幸运的是,这种事情以前也有人问过,for example、example、example……哦,你明白了
-
感谢您的帮助,但我仍然很困惑,我是 java 新手,所以所有这些词对我来说都是新的,你能描述一些步骤吗?
标签: java