【问题标题】:Instance Variable Changing实例变量更改
【发布时间】:2016-01-10 15:01:47
【问题描述】:

我想只使用实例变量来移动一个正方形。我有麻烦这是我的代码:

我有一个用于 Variables.JAVA 的变量:

public class Variables {
       String name;
       int Playerx;
       int Playery;
       int Playerw;
       int Playerh;
 }

它是主要但不改变上面的变量。 (简体)

public static void main(String args[]) throws InterruptedException {

       while (true) {
          Variables P = new Variables(){
                synchronized (c) {
                c.clear();
                first_level();
                P.Playerx = 50;
                P.Playery = 50;
                P.Playerw = 100;
                P.Playerh = 100;

                c.drawRect(P.Playerx, P.Playery, P.Playerw, P.Playerh);

                }

                Thread.sleep(25);

                // Controls
                if (c.isKeyDown(Console.VK_UP)) {
                    P.Playery -= 10;

                }
                else if (c.isKeyDown(Console.VK_DOWN)) {
                    P.Playery += 10;
                }
                else if (c.isKeyDown(Console.VK_LEFT)) {
                    P.Playerx -= 10;
                }

                else if (c.isKeyDown(Console.VK_DOWN)) {
                    P.Playery += 10;

                }
            }

P.Player(x,y,w,h) 不变?

如何解决?

【问题讨论】:

  • 您使用的是什么 GUI 库?摇摆?加工?其他?您确实知道您正在为您的 while 循环的每次迭代创建一个新的变量实例,对吗?当似乎没有任何多线程正在进行时,为什么你有一个同步块?

标签: java eclipse ide


【解决方案1】:

您在每次迭代中都设置了默认值,您的代码是同步的,因此在您绘制后对键做出响应,并且在下一次迭代中您将再次覆盖这些值,因此您将永远不会看到任何更改。 此外,您每次都实例化一个新的 P 对象,而不是保持以前的实例处于活动状态,因此它们是 GC。

【讨论】:

    猜你喜欢
    • 2017-09-10
    • 2016-12-19
    • 2014-10-21
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多