我正在用Java制作Pong以获得乐趣。我刚刚完成俄罗斯方块,但开始错误地构建游戏,所以在整个程序中遵循的糟糕设计限制了我可以做的事情。
这一次,我想开始吧。我想:
话虽如此,我提出的类结构是否正确使用了类?
主类:扩展JFrame 负责将JPanel添加到JFrame并使游戏初始化
public static void main(String[] args) {...
GamePanel类:扩展JPanel :仅负责了解自己的边界以及对象是否违反这些规则......
GameRules类:负责从GamePanel获取数据(如果球与球拍相撞),并根据该数据计算得分和其他信息......
ScorePanel类: GUI负责向玩家显示分数,级别和其他相关数据...将从GameRules类获取其数据。
Paddle类:扩展Rectangle2D(AWT)负责只知道自己的(x,y)坐标......拥有自己的颜色,设置新的位置
球类:扩展Ellipse2D(AWT)负责只知道自己的(x,y)坐标...就像Paddle一样
问题:
paintComponent()
?谢谢!
修改
答案 0 :(得分:4)
不确定将数学用于计算角度的位置球应该在
处反弹
GameRules和任何一个类一样好。如果你的数学更精细,你可以创建一个GameMath类。
keyListener应该去哪里?
我的第一个猜测是GamePanel类。
如何使用“游戏循环”而不是让游戏运行paintComponent()?
你的GamePanel paintComponent方法负责绘制桨和球的当前状态。如果你的桨和球有自己的绘制方法,那么paintComponent只会调用paddles和ball draw方法。
您的游戏循环会更新拨片和球类中的值。你可以在它自己的循环中调用paintComponent,以获得稳定的帧速率,并在不同的循环中调用你的桨和球位置更新。
尝试遵循MVC模型......是否实现了这一目标?
Java Swing可以在匿名操作类的形式中在视图中包含控制器代码。我说把绘图代码放在模型类中。
虽然代码不一定是分开的,但功能却是。模型类中的绘图代码由绘图JPanel执行。视图类中的控制代码作为控制操作的一部分执行。
看一下这篇文章Sudoku Solver Swing GUI,看看如何组合一个中等复杂的Swing GUI。我没有任何视频游戏的例子可以告诉你。