【发布时间】:2020-05-29 01:34:03
【问题描述】:
所以基本上我只是为了不同的目的而玩弄运动系统,并且在边缘制作方形停止时遇到了麻烦。 Square 从屏幕的一侧移动了大约 50% 的正方形,我不知道为什么会这样。
package SnakeMovement;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class SnakeMovement extends Canvas implements ActionListener, KeyListener {
Timer timer = new Timer(5, this);
int width, height;
int xSize = 50, ySize = 50;
int yPos = 0, xPos = 0, yVel = 0, xVel = 0;
public SnakeMovement(int w, int h) {
timer.start();
width = w;
height = h;
addKeyListener(this);
setFocusTraversalKeysEnabled(false);
setFocusable(true);
}
public void paint(Graphics g) {
super.paint(g);
g.fillRect(xPos, yPos, xSize, ySize);
}
public void actionPerformed(ActionEvent e) {
xPos += xVel;
yPos += yVel;
if (xPos >= width - xSize) {
xPos = width - xSize;
xVel = 0;
}
repaint();
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_W) {
yVel = -10;
xVel = 0;
}
if (key == KeyEvent.VK_S) {
yVel = 10;
xVel = 0;
}
if (key == KeyEvent.VK_A) {
xVel = -10;
yVel = 0;
}
if (key == KeyEvent.VK_D) {
xVel = 10;
yVel = 0;
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}
我只希望在屏幕的每一侧都完美地在边缘停顿。
【问题讨论】:
-
您不应将
Canvas与SwingUI 混用。对于自定义组件,扩展JComponent。然后,覆盖paintComponent而不是paint。 -
@Holger 所以不是我使用画布,我应该在我的主类中制作,它是 1,它有 jframe 有 jpanel,然后在让我们说运动类中使用 JComponent 我得到你的建议正确吗?
-
我不知道你的主要课程,也没有说什么。这是你的类
SnakeMovement扩展Canvas,我建议改为扩展JComponent。请务必阅读this part of the tutorial... -
我的主类只有窗口初始值设定项。所有代码都在 SnakeMovement 类中。
标签: java swing awt actionlistener keylistener