【问题标题】:I have an Array of 2 objects, when I use a for loop, both of the object gets the change that only one of them should have我有一个包含 2 个对象的数组,当我使用 for 循环时,这两个对象都得到了只有其中一个对象应该具有的更改
【发布时间】:2015-06-11 10:12:15
【问题描述】:

基本上我有这个代码:

for(int i = 0; i < tnt.size; i++){

        TNT t = tnt.get(i);

        if(cl.isLeft()){ t.getBody().setLinearVelocity(6,0); }

        if(cl.isRight()){t.getBody().setLinearVelocity(-6,0); } 

        if(t.getBody().getPosition().x > 1888/PPM){t.getBody().setLinearVelocity(-6,0);     }

        if(t.getBody().getPosition().x < 31/PPM){t.getBody().setLinearVelocity(6,0);}



    }

如果我在这个数组中有 2 个对象,当对象 #1 发生某些事情时,它的行为方式会发生变化,但对象 #2 会发生与对象 #1 相同的变化。我希望他们独立行动,那我该怎么做呢?

这是发生的事情的 GIF:https://gfycat.com/HelplessEmotionalCornsnake 当物体(TNT)接触到墙壁时,它应该改变方向,但在这里它们都改变方向,只有一个应该改变方向。

【问题讨论】:

  • by not 使用 for 循环并且 not 将它应用于两个对象?
  • 您正在更改 for 循环中的两个对象。您需要首先区分对象,即仅将这些更改应用于与墙壁碰撞的 TNT。在循环内部,更改将应用​​于 tnt 数组中的所有对象。
  • 感谢您的回答! @RaviRanjan 如何区分循环中的对象? (对不起,我不太了解,我是编程新手)
  • 我对图形不太感兴趣,但我想你可以跟踪对象的 x - y 轴。

标签: java arrays for-loop libgdx box2d


【解决方案1】:

您的代码似乎是正确的。我不认为您的错误出在代码中,您已发布。

请向我们展示您的 TNT-class- 以及 getBody() 所指的类。你使用任何静态方法/变量吗?如果例如 setLinearVelocity() 或您的运动方向的变量是静态的,这种行为是正常的,因为静态方法/变量对于所有实例都是相同的。

你确定,两个 TNT 类的两个主体对象不同吗?检查是否 tnt.get(0).getBody() != tnt.get(1).getBody()。

更新: 忘记一切:

您正在调用“cl.isVänster()”。这段代码是什么意思?运行 for 循环时 cl 不应更改,因此 cl.isVänster() 和 cl.isHöger() 也为每个 tnt 对象返回相同的值。

【讨论】:

  • 我做了这个代码: if(tnt.get(0).getBody() != tnt.get(1).getBody()){System.out.println("working"); } 它确实打印出“工作”。
  • 请解释一下,cl.isVänster() 是做什么的。这不会改变,因为 cl 不会改变。因此,对于循环中的每个 tnt-Object,您实际上都在做同样的事情。
  • 非常感谢!问题是 cl.Vänster() 和 cl.Höger() 未指定给数组中的特定对象。现在它已经修复了! gfycat.com/TatteredBoringClingfish
猜你喜欢
  • 2020-12-02
  • 2016-07-30
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2012-05-06
  • 2017-03-18
  • 2019-10-21
  • 1970-01-01
相关资源
最近更新 更多