Круговое столкновение в моей игре немного больше, чем изображение - PullRequest
1 голос
/ 16 мая 2019

Я реализую круговое столкновение в моей игре, созданной в Go, с использованием простой среды рендеринга Pixel.

Столкновение отлично работает с фигурами , как нарисованный круг

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

Вот где он сталкивается на изображениях:

Меньшее изображение: enter image description here

Увеличенное изображение: enter image description here

Столкновение сделано так:

[s - солнечная панель, показанная на «меньшем изображении», а p - игрок.]

math.Pow(math.Pow(s.center.X-p.center.X, 2)+math.Pow(s.center.Y-p.center.Y, 2), 0.5) <= s.size.X

Размер. X и размер. Y каждого изображения одинаковы, так как это круг

Центры рассчитаны правильно, и эта точная линия работает с фигурами [вы можете увидеть желтый контур на первом изображении, это форма, с которой он работает.]

Я что-то не так делаю? Почему это может быть вызвано ошибкой, если расчет не имеет отношения к самому изображению?

Вот как изображения отображаются, я полагаю, что проблема как-то с этим связана:

[g - генератор, видно на «увеличенном изображении»

func (g Generator) render(win *pixelgl.Window, imd *imdraw.IMDraw) {
    mat := pixel.IM.
        Moved(g.center)
    g.sprite.Draw(win, mat)
}

Форма рисуется также по центру.

1 Ответ

1 голос
/ 16 мая 2019

Если оба сталкивающихся объекта являются кругами с радиусами R1 и R2, то столкновение происходит, когда

math.Pow(math.Pow(s.center.X-p.center.X, 2)+math.Pow(s.center.Y-p.center.Y, 2), 0.5) <= 
 s.radius + p.radius

Что такое s.size - сторона квадрата изображения?В этом случае вы должны использовать size/2, чтобы получить радиус.
Почему вы игнорируете размер / радиус p?

Эти две причины вместе могут привести к описанному поведению (условие столкновения срабатывает, когда расстояние между центром становится равным s размер стороны)

...