Nano Hash - криптовалюты, майнинг, программирование

возврат и редактирование нескольких переменных [JAVA]

у меня проблема с моим первым игровым движком, пожалуйста, помогите мне :(

В первой я объясню проблему, а во второй я объясню свои вопросы.

Часть I:

у меня есть массив (с именем «Мир») класса объекта

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

объект имеет много свойств (имя, x, y, анимация, длина, ширина ....)

я хочу, например, сделать условие коллизии

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

Часть II:

я думаю, что вы понимаете меня, что я имею в виду, и теперь я объясню свой вопрос. вопросы :

1- если я могу обнаружить все коллизии, как внести изменения во все объекты с помощью одной строки, например

object2.prop = "something"

2- возможно ли в java вносить изменения в объект, а с некоторыми функциями автоматически вносить одинаковые изменения в более чем один объект.

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

Я извините за мой плохой английский, но я пытался использовать все слова в уме, чтобы объяснить проблему, и я хотел бы, чтобы я это сделал (любой ответ мог помочь мне даже с частью решение, пожалуйста, помогите)


  • Делать эти вещи обычно, но делать это быстро очень сложно. Просто помните, что если вы можете закодировать его в одну строку, это не значит, что он будет работать быстро. Очень часто использование большего количества строк для выполнения чего-либо сделает его быстрее. 23.07.2015
  • Я знаю, что мой движок не будет быстрым, но я не хочу его усложнять, потому что это мой первый движок, возможно, в следующей версии я постараюсь найти решение для таких проблем :) все равно спасибо 23.07.2015
  • Вам нужно посмотреть на логику того, что вы пытаетесь сделать, а затем найти лучшее/самое быстрое решение для разработки варианта использования. Если у вас есть 500 объектов, которые используют 500 уникальных переменных для хранения скорости каждого объекта, нет другой альтернативы, кроме как перебирать 500 переменных и обновлять каждую из них. Оптимизация заключалась бы в том, чтобы сохранить список только движущихся объектов, например. но неподвижные объекты также могут столкнуться с движущимися! Если у вас есть коллекция объектов (например, Arraylist), вы можете сделать это одной строкой: for (gameObject obj: allObjects) obj.prop = something; 23.07.2015
  • да, вот и все, не могли бы вы объяснить мне, что вы сказали [[ for (gameObject obj: allObjects) obj.prop = something; ]] или дайте мне ссылку для более подробного объяснения, пожалуйста 23.07.2015

Ответы:


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";

Или, что еще лучше, вы могли бы инкапсулировать это в функцию для обнаружения столкновений (вы можете посмотреть этот вопрос о том, как это сделать Простой и быстрый алгоритм столкновения в java для блоков, не выровненных по оси):

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";
23.07.2015
  • это то, что я имею в виду, спасибо :) :), но я не хочу менять prop = что-то из всех объектов, которые мне нужны только для некоторых объектов, например Number1,5,7 и 8, есть ли решение ?? 23.07.2015
  • Вы можете либо сохранить список объектов для изменения, либо заменить World на ObjectsToChange, и вместо добавления всех 500 вы можете добавить только те, которые хотите изменить. Помните, что это всегда указатели на объекты, поэтому он не делает копии. В качестве альтернативы вы можете добавить условие в цикл for. 23.07.2015
  • Последний вопрос --› означает ли public ArrayList‹Object› World= new ArrayList‹›();, что World является указателем, если не как сделать объявление указателя? и благодарю вас 23.07.2015
  • В java все объекты (кроме примитивов) всегда являются указателями (также иногда называемыми ссылками). 23.07.2015
  • Вы можете сделать их 500 следующим образом: public Object World[] = new Object[500]; Вы уже делаете это в своем коде... 23.07.2015
  • Спасибо, вы помогли мне со всеми моими проблемами (Плохой английский, Тупое программирование...) :) :) Спасибо 23.07.2015
  • КСТАТИ. Я только что видел этот вопрос, на который вы также можете взглянуть :) алгоритм в java для квадратов"> stackoverflow.com/questions/31594857/ 23.07.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..