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
為繪制多邊形,然后將其還原。
添加回答
舉報