我目前正在开发一款 2D 游戏,这将是一个难题。我把所有东西都设置好了,把我所有的部分都添加到我的板上(称为View),它们都正确对齐。
我的下一步是选择一块,MouseEvent#mousePressed以便能够使用箭头键移动它KeyEvent#keyPressed。我目前遇到的问题是,每当我移动或调整窗口大小时,我的作品都会自行重新绘制。如果我点击一个块并想要移动它,其他块也会移动(在某种程度上,它们不应该移动,因为一个步骤等于大约 100 像素)。
如果有人能告诉我我的问题在哪里并给我一些建议,我将不胜感激。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Puzzle {
public static void main(String[] args) {
SwingUtilities.invokeLater(Puzzle::new);
}
public Puzzle() {
JFrame frame = new JFrame("Puzzle");
frame.setSize(400, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
View view = new View();
view.createPieces();
frame.setContentPane(view);
view.setFocusable(true);
MouseAdapterMod listener = new MouseAdapterMod(view);
view.addMouseListener(listener);
view.addKeyListener(listener);
frame.setVisible(true);
}
}
class View extends JPanel {
final List<Piece> pieces = new ArrayList<>();
public View() {
}
void createPieces() {
Piece topLeft = new Piece(100, 100, 0, Color.YELLOW);
pieces.add(topLeft);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D gc = (Graphics2D) g;
for (Piece needle : pieces) {
needle.translate(needle.getLocation().x, needle.getLocation().y);
gc.setColor(needle.color);
gc.fill(needle);
gc.draw(needle);
}
}
}
编辑:但问题是,最终我想移动我的作品Piece#setLocation以始终跟踪它们当前的 x/y 坐标。我想,我需要Piece#getLocation在我的绘画中调用以根据位置绘制它们,但我不知道如何。从字面上使用Piece#setLocation什么都不做。
郎朗坤
繁星coding
守着一只汪
随时随地看视频慕课网APP
相关分类