Хобрук: Ваш путь к мастерству в программировании

Vector2 выключен - libgdx/java

game.batch.begin();
for (Array obstacle_array123: obstacle_array) {
    body = obstacle_array123;
    for (Body bodies: body) {
        if (bodies.getUserData() instanceof Array && bodies.isActive()) {
            sprites_array = (Array)bodies.getUserData();
            for (int fix_pos = 0; fix_pos < sprites_array.size; fix_pos++) {
                sprite = sprites_array.get(fix_pos);
                if (verts.size != 0) verts.removeRange(0, verts.size - 1);
                f = bodies.getFixtureList().get(fix_pos);
                s = (PolygonShape)f.getShape();
                transform = bodies.getTransform();

                for (int i = 0; i < s.getVertexCount(); i++)
                {
                    s.getVertex(i, tmp);
                    transform.mul(tmp);
                    verts.add(new Vector2(tmp));
                }
                rotation_point.set((verts.get(0).x + verts.get(1).x + verts.get(2).x + verts.get(3).x) / 4, (verts.get(0).y + verts.get(1).y + verts.get(2).y + verts.get(3).y) / 4);

                sprite.setPosition(rotation_point.x - sprite.getWidth() / 2, rotation_point.y - sprite.getHeight() / 2);
                sprite.setRotation(bodies.getAngle() * MathUtils.radiansToDegrees);
                sprite.draw(game.batch);
            }
        }
    }
}
game.batch.end();

У меня есть игра, в которой мои тела состоят из нескольких квадратных приспособлений, так что это код для рендеринга каждого квадратного спрайта на каждом квадратном приспособлении.

2 проблемы - 1.st --> он отображает только первый спрайт в массиве
2.nd --> если вы посмотрите на следующий цикл (РЕШЕНО)

for (int i = 0; i < s.getVertexCount(); i++)
{
    s.getVertex(i, tmp);
    transform.mul(tmp);
    verts.add(new Vector2(tmp));
}

ну, это явно отличается от

for (int i = 0; i < s.getVertexCount(); i++)
{
    s.getVertex(i, tmp);
    transform.mul(tmp);
    verts.add(tmp);
}

Порожденные координаты во втором примере неверны для половины ширины и половины высоты квадрата.

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

19.09.2016

  • Каков размер sprites_array? 19.09.2016
  • Хорошо, перепробовав все возможные переменные, пришел к следующему: нашел ошибку, больше похожую на опечатку: for (int z = 0; i ‹ 1; i++), поэтому продолжал выбрасывать 0 19.09.2016

Ответы:


1

Вероятно, вам следует задать оба вопроса по отдельности, но чтобы ответить на ваш второй вопрос, они РАЗЛИЧАЮТСЯ.

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

Во втором вы добавляете одни и те же Vector2 к verts снова и снова, так что он будет иметь только один Vector2 с одним и тем же значением снова и снова (помните, что Java передается по ссылке).

Предостережение. Мой ответ предполагает, что verts является своего рода стандартной коллекцией или libgdx Array.

19.09.2016
  • о да, моя ошибка (поймал в процессе и полностью пропустил ее), похоже, мне нужно создать массив значений tmp, так как я создаю игру и не хочу использовать NEW в цикле рендеринга 19.09.2016
  • Новые материалы

    HMTL - Многозадачное обучение для решения задач НЛП
    Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..