【发布时间】:2016-05-23 14:13:26
【问题描述】:
我正在尝试用 java 编写一个 2D 乒乓球游戏。我遇到的问题是关于流动性。我使用图像(与大多数 2D 游戏一样)作为背景、桨和球。使用 Actionlistener 创建了游戏,并将它与一个计时器附加到游戏中。现在我只是在游戏循环中有这个代码用于碰撞。
@Override
public void actionPerformed(ActionEvent e) {
if (ball.y <= 0 || ball.y + ball.height + 35 > HEIGHT) { // Horizontal
// Walls
// collision
ballspeedY = -ballspeedY;
}
if (ball.x <= 0 || ball.x + ball.width + 5 >= WIDTH) { // Vertical Walls
// collision
ballspeedX = -ballspeedX;
}
ball.y += ballspeedY;
ball.x += ballspeedX;
renderer.repaint();
}
还有这个绘图代码
public void repaint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.drawImage(backgroundImage, 0, 0, WIDTH, HEIGHT, null);
g2d.drawImage(ball.image, ball.x, ball.y, ball.width, ball.height, null);
g2d.drawImage(paddle.image, paddle.x, paddle.y, paddle.width, paddle.height, null);
}
问题是,当我增加球的速度时,它开始移动不顺畅。我做了一项研究并试图取消绘制背景图像。球开始移动得更顺畅了。我感到困惑的是,如果我有移动的背景或 100 个球或其他东西怎么办。我做错了什么,请有人告诉我应该使用哪种方式在屏幕上顺利移动这些对象。使用大得多的图像或背景甚至 3D 游戏的游戏移动得如此流畅,但我的简单乒乓游戏却没有。我做错了什么?
已解决:问题出在这一行: g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
这条线破坏了动画的流畅性。当我删除它时,一切都运行得非常快和流畅
【问题讨论】:
-
当您说小球移动不顺畅时,它是在闪烁,还是似乎从一个位置跳到另一个位置而不是连续滑动?
-
不闪烁,就像你说的第二个参数。从一个位置跳到下一个位置,而不是顺利滑动