Обработка маркеров взаимодействия

Привет. Как сделать так, чтобы пули сталкивались с объектами в процессе обработки? Пули выпускаются, перемещаются и вращаются, но всякий раз, когда я пытаюсь использовать функцию dist(), она всегда дает мне 0 в качестве положения вектора. Как мне получить правильное положение вектора, если я хочу, чтобы пуля столкнулась с объектами, используя расстояние и сделать другой объект исчезнет?

Вот код

void move(){ 
   passed  = passed + time;
   if (passed > bulletLife) {
      alive = false;
   }

   forward.x = sin(theta);
   forward.y = -cos(theta);
   float speed = 15.0f;
   velocity = PVector.mult(forward, speed);
   side.add(forward);

   void display(){ 
      pushMatrix();
      translate(side.x, side.y);
      rotate(theta);
      stroke(255);
      ellipse(side.x, side.y, 30, 30);
      popMatrix();

Спасибо


person UserMan    schedule 15.01.2015    source источник
comment
Где вы используете функцию dist() в этом коде? Можете ли вы опубликовать MCVE?   -  person Kevin Workman    schedule 16.01.2015
comment
Вот как я вычисляю расстояние PVector kool2 = координаты(); float d = kool2.dist(location) / 10; }//конец отображения() Координаты PVector() { PVector kool; kool = новый PVector(side.x + cos(theta) * x2, side.y + sin(theta) * y2); вернуть кул; }//конечные координаты   -  person UserMan    schedule 16.01.2015


Ответы (1)


Вы получаете 0 из dist(), потому что translate() перемещает систему координат! Я думаю, что больше, чем ваш вопрос, вам нужно пересмотреть свой код в целом. Вы переводите в side.x, side.y (который тогда будет 0,0, пока вы не вызовете popMatrix()), но затем вы рисуете эллипс в side.x, side.y, который смещен от его фактического положения.

Другими словами: если позиция 100,200, вы на самом деле рисуете объект в 200,400!

Если вы пропустите часть translate(), вы можете использовать это, чтобы нарисовать свой объект:

void display() {
  stroke(255);
  ellipse(side.x, side.y, 30,30);
}

И это, чтобы проверить столкновение:

if (dist(side.x, side.y, bullet.x, bullet.y) == 0) {
  collision = true;
}
else {
  collision = false;
}

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

person JeffThompson    schedule 15.01.2015
comment
Спасибо за все это, но когда я пропускаю перевод, пули просто появляются в случайных позициях или, по крайней мере, не в локации корабля. - person UserMan; 16.01.2015
comment
Однако ваши вопросы не об этом. Может быть, передать это на форум Processing, чтобы получить помощь? Вы также можете рассмотреть возможность добавления PVectors, например, использовать один для направления/скорости. - person JeffThompson; 16.01.2015