提前,我想说有很多类似的帖子,但是,它们都没有适用于我,或者根本没有任何答案,并且已经过时了,这意味着可能有新的java可以帮助我解决问题的功能。
无论如何,我想制作一个有网球拍的游戏。当然,他们必须轮换。为了旋转,我必须在我的KeyListener中调用我的Graphics2D方法。如果不在我的密钥监听器方法中添加新的Graphics2D变量,我该如何做呢?
以下是我所有涉及实现此目标的方法:
public void draw(Graphics2D g2d) {
g2d.drawImage(getPaddleImg(), x, y, null);
}
public static Image getPaddleImg() {
ImageIcon ic = new ImageIcon("C:/Users/Elliot/Desktop/Eclipse Game Tennis/paddle.png");
return ic.getImage();
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key==KeyEvent.VK_W){
g2d.rotate(Math.toRadians(5));
} else if(key==KeyEvent.VK_W) {
g2d.rotate(Math.toRadians(-5));
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if(key==KeyEvent.VK_W){
g2d.rotate(Math.toRadians(0));
} else if(key==KeyEvent.VK_W) {
g2d.rotate(Math.toRadians(0));
}
}
我知道,由于g2d
和KeyPressed()
方法中的KeyReleased()
,此代码会给我一个错误。我如何在这两种方法中调用g2d
?或者我如何在draw()
方法中做同样的事情?
答案 0 :(得分:2)
错误的方法:您可以使用Component.getGraphics()
来获取图形对象。
正确的方法:所有绘画都应该在paint(Component)
方法内完成。这是因为用户可以随时调整窗口大小/打开/关闭窗口。在KeyListener
(也是研究键绑定)中,您应该更新有关如何绘制播放器/球拍的设置,然后调用repaint()
答案 1 :(得分:0)
OK!我实际上是自己想出来的!我所做的是在g2d.rotate(.....)
方法中称为draw()
。我所做的是创建检查旋转的变量,并在我的KeyPressed()
方法中将它们设置为true或false。这是我在draw()
方法中使用的代码:
if(isRotatingPositive == true) {
g2d.rotate(Math.toRadians(speed));
} else if(isRotatingNegative == true) {
g2d.rotate(Math.toRadians(-speed));
}