2014-01-30 4 views
1

Для целей оптимизации кода я хочу создать массив 2d, содержащий 40 равных квадратов (10x10px). Каждый квадрат представляет 1 \ 40 отображаемого окна (400x400 пикселей).2d инициализация и выбор квадратов массива

Я заполняю массив 2d стандартной двунаправленной методологией цикла.

int col = 40; 
    int row = 40; 
    int boxPosition = 0; //Position of the box (coordinates) 
    Integer[][] boxes = new Integer[40][40]; 

    for (int i = 0; i < col; i++) { 
     for (int j = 0; j < row; j++) { 
      boxes[i][j] = boxPosition; 
      boxPosition += 10; //Creates a 10px box. 
     } 
     boxPosition = 0; //Resets box size for next column 
    } 

Есть несколько кругов в этой программе. У нас есть корабль (круг), который стреляет ракетами (кругами) в сторону врагов (кругов).

Я хочу запустить обнаружение столкновения ТОЛЬКО, когда на одном из квадратов есть пуля + враг. Это значительно оптимизирует код.

Вопрос в том, как создать эти квадраты из массива 2d? Как выбрать каждый квадрат? Как проверить, находятся ли ракеты и враги внутри одного квадрата?

Примеры кода ВЕЛИКОЕ ПРИМЕНЕНИЕ.

Спасибо.

+0

Что означает boxSize? Если это размер «ящика», то они не все равны. Если это позиционная вещь, тогда вам нужно более четко понять, что это значит. – JLewkovich

+0

Отличный пункт. Да, это позиция, я просто это исправил. – Gregg1989

+0

Таким образом, сохранение координат как одного значения на самом деле не так. Вам нужно как минимум два значения координат, если вы находитесь на 2D-сетке – JLewkovich

ответ

2

Я не уверен, что вы делаете с 2D-массивом или почему он содержит целые числа, или почему он содержит увеличивающийся размер в каждом столбце, но общий способ сделать столкновение на основе сетки состоит в том, чтобы иметь 2D-массив от GameObjects. GameObject в вашем случае может быть кораблем, ракетой или врагом.

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

+0

Делает смысл. Можете ли вы указать какой-нибудь псевдокод? Это действительно очень помогло бы мне. – Gregg1989

+0

Как насчет того, чтобы попробовать что-то и задать вопрос, когда у вас есть конкретная проблема? Однако псевдокод не сильно отличался от моего последнего абзаца. –

+0

Я сделал именно то, что вы просили меня. Пожалуйста, ознакомьтесь с моей новой темой http://gamedev.stackexchange.com/questions/69686/grid-based-collision-detection-between-circles?noredirect1_comment125529_69686 – Gregg1989

Смежные вопросы