Java摆动2D重力模拟不起作用

时间:2016-12-14 15:32:03

标签: java swing simulation

我有这个代码用于重力模拟,玩家可以在鼠标位置按住鼠标点击创建行星(按住鼠标的时间越长,它就越大),最多100个行星。

但我的问题是,行星是成功创造的,但没有显示出来。

代码:

ASUS Memo Pad 7 5.0 Built-in Explorer Suite  Built-in Explorer Test
LG Nexus 5X 6.0 Built-in Explorer Suite  Built-in Explorer Test
Motorola Nexus 6    5.0 Built-in Explorer Suite  Built-in Explorer Test
LG V10 (T-Mobile)   5.1.1   Built-in Explorer Suite  Built-in Explorer Test
Motorola Moto G - 3rd Gen   5.1.1   Built-in Explorer Suite  Built-in Explorer Test
Motorola Moto G - 2nd Gen   6.0 Built-in Explorer Suite  Built-in Explorer Test
Motorola DROID Turbo (Verizon)  5.1 Built-in Explorer Suite  Built-in Explorer Test
Dell Venue 8 7840   5.1 Built-in Explorer Suite  Built-in Explorer Test
LG G3 (AT&T)    5.0.1   Built-in Explorer Suite  Built-in Explorer Test
LG V10 (AT&T)   5.1.1   Built-in Explorer Suite  Built-in Explorer Test
LG Nexus 5  6.0 Built-in Explorer Suite  Built-in Explorer Test
ASUS Nexus 7 - 2nd Gen (WiFi)   5.0.1   Built-in Explorer Suite  Built-in Explorer Test
Huawei Nexus 6P 6.0 Built-in Explorer Suite  Built-in Explorer Test
HTC One M9 (Verizon)    5.0.2   Built-in Explorer Suite  Built-in Explorer Test

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

在for-each循环中,您要为局部变量Planet分配一个新的planeti(for-each循环的本地变量,之后丢弃),所以这没用。

您应该使用for循环替换此循环,以便将Planet分配给数组的当前索引。

所以替换这个循环:

         for (Planet planeti:planets) {
              if (planeti == null) {
                  planeti=new Planet(mouse[0],mouse[1],w,0,0);
                  System.out.println("Planet succesfully appended");
                  System.out.println(Arrays.toString(new float[] {planeti.x,planeti.y,planeti.w}));
                  break;
              }
         }

有了这个循环:

        for (int i=0;i<planets.length;i++) {

              Planet currentPlanet = planets[i];

              if (currentPlanet == null) {

                  Planet newPlanet = new Planet(mouse[0],mouse[1],w,0,0);
                  planets[i] = newPlanet; 
                  System.out.println("Planet succesfully appended");
                  System.out.println(Arrays.toString(new float[] {newPlanet.x,newPlanet.y,newPlanet.w}));
                  break;
              }
         }