用Java实现一个简单的游戏(与图形相关)
我是Java游戏编程新手,尤其是在图形方面,因此我想寻求一些关于如何用Java图形化实现以下游戏的建议 游戏非常简单,它显示了一个正方形,这个正方形被进一步划分为一个2x2的盒子,游戏的目的是将总共44个芯片放入这4个盒子中,用户应该能够将芯片从一个盒子拖放到另一个盒子中 就这样!我的问题是:用Java实现一个简单的游戏(与图形相关),java,graphics,java-2d,Java,Graphics,Java 2d,我是Java游戏编程新手,尤其是在图形方面,因此我想寻求一些关于如何用Java图形化实现以下游戏的建议 游戏非常简单,它显示了一个正方形,这个正方形被进一步划分为一个2x2的盒子,游戏的目的是将总共44个芯片放入这4个盒子中,用户应该能够将芯片从一个盒子拖放到另一个盒子中 就这样!我的问题是: 是否有现成的图库,我可以用来绘制由4个盒子和芯片组成的正方形 如果1)的答案是否定的,那么是否有任何教程可以让我自己编写 如何以图形方式实现拖放部件 非常感谢。芯片可以通过添加到JLabel的图标来表示
非常感谢。芯片可以通过添加到JLabel的图标来表示 正方形可以用JPanel表示
首先阅读上Swing教程中的部分。还有其他感兴趣的部分:如何使用面板、使用布局管理器、如何编写鼠标侦听器、可能的拖放部分。芯片可以通过添加到JLabel的图标来表示 正方形可以用JPanel表示
首先阅读上Swing教程中的部分。还有其他感兴趣的部分:如何使用面板、使用布局管理器、如何编写鼠标侦听器、可能的拖放部分。我会使用画布和覆盖绘画(Graphics g)并使用它绘制各种元素。然后可以使用计时器或游戏循环调用repaint()
public class MyCanvas extends Canvas
{
public void gameLoop()
{
//Don't do it this way, this is just a quick example.
//Instead look up better game loop options.
while (true)
{
repaint(); //automatically calls paintComponent
Thread.yield();
}
}
//Put all the stuff that gets drawn in here.
//@Override
public void paint(Graphics g)
{
super.paint(g);
for (int i = 0; i < chips.size(); i++)
{
chips.get(i).draw(g);
}
}
}
public class Chip
{
private int x;
private int y;
public void draw(Graphics g)
{
g.setColor(Color.BROWN);
g.fillRect(x, y, 50, 50);
//etc.
}
}
公共类MyCanvas扩展了Canvas
{
public void gameLoop()
{
//不要这样做,这只是一个简单的例子。
//而是寻找更好的游戏循环选项。
while(true)
{
repaint();//自动调用paintComponent
螺纹屈服强度();
}
}
//把所有的东西都放在这里。
//@凌驾
公共空间涂料(图g)
{
超级油漆(g);
对于(int i=0;i
我会使用画布和覆盖绘画(图形g)并使用它绘制各种元素。然后可以使用计时器或游戏循环调用repaint()
public class MyCanvas extends Canvas
{
public void gameLoop()
{
//Don't do it this way, this is just a quick example.
//Instead look up better game loop options.
while (true)
{
repaint(); //automatically calls paintComponent
Thread.yield();
}
}
//Put all the stuff that gets drawn in here.
//@Override
public void paint(Graphics g)
{
super.paint(g);
for (int i = 0; i < chips.size(); i++)
{
chips.get(i).draw(g);
}
}
}
public class Chip
{
private int x;
private int y;
public void draw(Graphics g)
{
g.setColor(Color.BROWN);
g.fillRect(x, y, 50, 50);
//etc.
}
}
公共类MyCanvas扩展了Canvas
{
public void gameLoop()
{
//不要这样做,这只是一个简单的例子。
//而是寻找更好的游戏循环选项。
while(true)
{
repaint();//自动调用paintComponent
螺纹屈服强度();
}
}
//把所有的东西都放在这里。
//@凌驾
公共空间涂料(图g)
{
超级油漆(g);
对于(int i=0;i
可能应该移动到gamedev.stackexchange。虽然已经有一个类似的问题可以提供答案:可能应该移动到gamedev.stackexchange。虽然已经有一个类似的问题可以提供答案:这对我开始学习非常有帮助。只是一个简单的后续问题:假设您将这些JLabel(代表芯片)添加到JPanel(代表一个盒子)中,这是否意味着我必须确保4个盒子中的每一个都足够容纳44个芯片(在极端情况下)?我真的不建议在这个或任何游戏中使用JLabel。它的速度非常慢,并且有很多限制。@skyork,使用网格布局来保存标签。@Eli,再次阅读游戏说明。用户将图标从一个正方形拖动到另一个正方形。这不是一个到处都是子弹和东西的射击游戏。是的,但是他们可以用更少的工作以适当的方式做同样的事情,因此如果他们想添加粒子效果或更漂亮的动画或其他东西,他们会被设置为去做。不如先用正确的方法学习,不是吗?这对我开始学习很有帮助。只是一个简单的后续问题:假设您将这些JLabel(代表芯片)添加到JPanel(代表一个盒子)中,这是否意味着我必须确保4个盒子中的每一个都足够容纳44个芯片(在极端情况下)?我真的不建议在这个或任何游戏中使用JLabel。它的速度非常慢,并且有很多限制。@skyork,使用网格布局来保存标签。@Eli,再次阅读游戏说明。用户将图标从一个正方形拖动到另一个正方形。这不是一个到处都是子弹和东西的射击游戏。是的,但是他们可以用更少的工作以适当的方式做同样的事情,因此如果他们想添加粒子效果或更漂亮的动画或其他东西,他们会被设置为去做。不如先用正确的方法学习,不是吗?-1。再次阅读游戏描述。这不是一个需要游戏循环的游戏。画布也没有paintComponent()方法。请更正paintComponent,我的错误。如果您正在重写JPanel或类似的东西,则会出现这种情况。然而,我认为你给我-1是没有道理的,我的观点仍然很正确。你正在教skyork使用Swing元素来制作游戏,如果他需要任何灵活性,他应该使用图形。应用程序使用Swing,游戏使用图形或OpenGL。同样,这不是需要“游戏循环”的游戏类型。这是一个简单的游戏,用户将组件从一个正方形拖到另一个正方形。仅仅因为用户称这是一个“图形游戏”,并不意味着它是一个在您试图推广的上下文中。阅读游戏