【问题标题】:2D Game not repainting2D游戏不重绘
【发布时间】:2016-04-30 14:34:57
【问题描述】:

我检查了其他问题,但找不到与我情况相同的问题,所以这是我的问题。

我正在制作一个 2 人格斗游戏,您可以在同一台计算机上使用不同的按键进行游戏。一切都很好,但是当我尝试用按键移动屏幕上的椭圆时,它并没有移动。

这是我第一堂课的代码 - http://pastebin.com/wA0JXdzr 第二类 - http://pastebin.com/ArByyirt

我想我需要在游戏循环的第二个类中调用 repaint,但它说它不能对其进行静态引用。

【问题讨论】:

  • 不鼓励使用外部服务共享代码。代码应直接作为文本包含在问题中。
  • 我的错,我对代码块很糟糕,它们无法正确粘贴。

标签: java jframe paint repaint


【解决方案1】:

您试图直接从另一个类调用非静态方法,这在 java 中是不合法的。第一个类中的paint() 方法是非静态方法。您可以使用变量stickx2 等,因为它们是您的第一个类中定义的静态变量。

因此,我建议您在 gameLoop 类中创建一个stickFrame() 对象,并将您的所有代码复制到您的stickframe 主方法中,并将其放入您的gameLoop 主方法中。强烈不建议您使用两种主要方法。

在您的序列化 ID 下方声明一个 Stick Frame 变量。

StickFrame s;

然后在你的 gameLoop 构造函数中实例化它

s = new StickFrame();

现在我们需要解决另一个类问题的重绘问题。 为此,我们需要 gameLoop 类中的方法。

  public void repaintStickFrame()
  {
      s.repaint();
  }

然后调用它

s.repaintStickFrame() in your loop.

或者你可以打电话

s.repaint();//place in loop

这是一个与您的问题相似并且也有解决方案的问题的链接

Calling repaint from another class JFrame

这里有一个链接,它解释了如何在创建对象后调用对象方法(就像我们在上面所做的那样,它允许我们从不同的类调用 repaint() 方法):

https://docs.oracle.com/javase/tutorial/java/javaOO/usingobject.html

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 2020-07-14
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2019-08-31
    相关资源
    最近更新 更多