2 回答
TA贡献1797条经验 获得超4个赞
如果您从这个问题恢复到您的Piece代码,您可以通过以下方式移动片段:
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
view.translatePiece(0, -100);
break;
case KeyEvent.VK_DOWN:
view.translatePiece(0, +100);
break;
case KeyEvent.VK_LEFT:
view.translatePiece(-100, 0);
break;
case KeyEvent.VK_RIGHT:
view.translatePiece(+100, 0);
break;
}
}
并添加到您的视图中:
void translatePiece(int dx, int dy) {
if (current != null) {
current.x += dx;
current.y += dy;
repaint();
}
}
如果您在单击某个片段之前按下箭头键,该if (current != null) { ... }测试将防止您的应用程序崩溃,它目前正在执行此操作。
TA贡献1872条经验 获得超4个赞
你可以,而不是翻译多边形,翻译位置,并将其用于绘画:
在keyPressed中,替换current.translate以平移位置而不是整个多边形(例如,您可以覆盖Piece#translate调用current.getLocation().translate)。
在View#paintComponent中,替换:
needle.translate(needle.getLocation().x, needle.getLocation().y);
和
gc.translate(needle.getLocation().x, needle.getLocation().y);
并添加
gc.translate(-needle.getLocation().x, -needle.getLocation().y);
在你的 for 循环结束时。这会将整体转换Graphics2D为绘制多边形,然后将其还原。
添加回答
举报
