【问题标题】:return and edit of multiple variables [JAVA]多个变量的返回和编辑[JAVA]
【发布时间】:2015-07-23 17:35:49
【问题描述】:

我的第一个游戏引擎有问题,请帮助我:(

第一部分我将解释问题,第二部分我将解释我的问题。

第一部分:

我有一个对象类的数组(名为“World”)

public Object World[] = new Object[500];

对象有许多属性(名称、x、y、动画、长度、宽度......)

例如,我想提出collession的条件

if( Function_to_detect_collessions("object1_name","object2_name") ){
object2.Animation = "new value" ;
} 

你会明白我的意思:

1- 许多对象可以得到相同的名称

2- 如果不止一个碰撞发生在两个以上的对象上 具有相同的名称(object1_name 和 object2_name),然后 object2.animation 的修改将在所有触摸 对象

example :
if( collesion("ball","ground") ){
ball.movement = stop;
}
//Now imagine that there is two objects (two Balls) on the ground

第二部分:

我认为你明白我的意思,现在我将解释我的 问题。问题:

1-如果我可以检测到所有的 collessions 如何进行修改 像

这样一行的所有对象
object2.prop = "something"

2- 是否可以在 java 中对对象进行修改并使用 某些函数对多个对象进行相同的修改 自动。

----------------------------------------------- ------

对不起我的英语不好,但我试图用我脑海中的所有词语来解释问题,我希望我这样做(任何答案都可以帮助我,即使是解决方案的一部分,所以请帮助

【问题讨论】:

  • 做这些事情通常是,但快速做起来真的很难。请记住,如果您可以在一行中编写代码,并不意味着它会运行得很快。很多时候使用更多的行来做某事会使其更快。
  • 我知道我的引擎不会很快,但我不想让它变得复杂,因为这是我的第一个引擎,也许在下一个版本中我会尝试为这种类型找到解决方案问题:)还是谢谢你
  • 您需要查看您正在尝试做的事情的逻辑,然后找到最佳/最快的解决方案来构建用例。如果您有 500 个对象,它们使用 500 个唯一变量来存储每个对象的速度,那么除了循环超过 500 个变量并更新每个变量之外别无选择。优化将是保留仅移动对象的列表,例如但是静止的物体也可以与移动的物体发生碰撞!如果您有对象集合(例如 Arraylist),您可以在一行中执行此操作:for (gameObject obj: allObects) obj.prop = "something";
  • 是的,就是这样,你能解释一下你所说的吗[[ for (gameObject obj: allObects) obj.prop = "something"; ]] 或者给我一个链接以获得更多解释

标签: java arrays game-engine multiple-value


【解决方案1】:

您可以尝试像这样使用 Java 集合:

public ArrayList<Object> World= new ArrayList<>();

for (int i =0; i<500; i++)
  World.add(new Object(i));

// Update all objects
for (Object myObject : World) myObject.prop = "Something";

编辑:

根据您随后的问题。如果您只需要查看特定列表,您可以这样做:

public ArrayList<Object> MoversAndShakers = new ArrayList<>();

MoversAndShakers.add(World.get(3));
MoversAndShakers.add(World.get(5));
MoversAndShakers.add(World.get(9));

// Update all MoversAndShakers
for (Object myObject : MoversAndShakers) myObject.prop = "Something";

或者更好的是,您可以将其封装在一个函数中以检测碰撞(您可能想查看这个问题,了解如何做到这一点Simple and fast collision algorithm in java for non-axis aligned boxes):

public ArrayList<Object> MoversAndShakers = new ArrayList<>();

ArrayList<Object>  getMovingObjects(ArrayList<Object> World)
{
  ArrayList<Object> MoversAndShakers = new ArrayList<>();

  for(Object currentObj : World)
  {
     if (currentObj.velocity > 0)
          MoversAndShakers.add(currentObj);
  }
  return MoversAndShakers;
}

然后上面的归约到这个

// Update all moving objects
for (Object myObject : getMovingObjects(World)) 
   myObject.prop = "Something";

【讨论】:

  • 这就是我的意思谢谢你:) :),但我不想改变所有我需要的对象的 prop = "somthing" 只是为了一些对象,例如 Number1,5,7 和8 有解决办法吗??
  • 您可以保留要更改的对象列表,并将“World”替换为“ObjectsToChange”,而不是添加全部 500 个,您可以只添加要更改的对象。请记住,这始终是指向对象的指针,因此它不会进行复制。或者,您可以在 for 循环中添加条件。
  • 最后一个问题 --> public ArrayList World= new ArrayList(); 是否意味着 World 是一个指针,如果不是如何声明指针?谢谢你
  • 在java中所有的对象(除了原语)总是指针(有时也称为引用)。
  • 你可以像这样制作 500 个: public Object World[] = new Object[500];你已经在你的代码中这样做了......
猜你喜欢
  • 2012-08-11
  • 2018-11-16
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多