Как найти, какой CCSprite в массиве ближе всего к данной позиции?

Я пытался создать AI для своего класса Enemy, и у меня возникают проблемы с обновлением, которое Enemy ближе всего к Player. Он работает, когда есть только два врага, но когда у вас 3 или более, когда возникают проблемы. Я всего лишь хочу, чтобы ближайший к атаке, но все враги, кроме самого дальнего, делают. Я думаю, что это связано с тем, что с тремя или более спрайтами между ними можно заключить безопасное положение и атаку, но как я получу средние враги, чтобы понять, когда перед ними стоит какая-то tempEnemy?

 CCArray *fellowEnemy = [self allyArray];
for (int i = 0; i<[fellowEnemy count]; i++) {
    Enemy *tempEnemy = [fellowEnemy objectAtIndex:i];
    if (tempEnemy == self) continue;
    CGPoint tempDifference = ccpSub(player.position, tempEnemy.position);
    CGPoint selfDifference = ccpSub(player.position, self.position);
    float tempToPlayer = ccpLength(tempDifference);
    float selfToPlayer = ccpLength(selfDifference);

    if (tempToPlayer > selfToPlayer) {
        newPosition = attackPosition;

    }else if (tempToPlayer < selfToPlayer){
        newPosition = safePosition;

    }else{
        newPosition = safePosition;
    }
}

[self setPosition:newPosition];

Спасибо

1
nl ja de
Является ли ваш вопрос «Как найти, какой CCSprite в массиве ближе всего к данной позиции?»
добавлено автор Sebastian, источник
Да, вот что я должен был задать.
добавлено автор user2049166, источник

1 ответы

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

    CCArray *fellowEnemy = [self allyArray];
    if( fellowEnemy.count > 0 )
    {
        Enemy *closestEnemy = nil;
        float minDistance = 0;

        for (int i = 0; i<[fellowEnemy count]; i++) {
            Enemy *tempEnemy = [fellowEnemy objectAtIndex:i];
            if (tempEnemy == self) continue;

            if( closestEnemy == nil )
            {
                closestEnemy = tempEnemy;
                minDistance = ccpDistance(player.position, closestEnemy.position);
                continue;
            }

            float curDistance = ccpDistance(player.position, tempEnemy.position);
            if( curDistance < minDistance )
            {
                minDistance = curDistance;
                closestEnemy = tempEnemy;
            }
        }

        if( closestEnemy != nil )
        {
           //Here you have closest enemy 
           //Write your remaining logic (position, attack... whatever)
        }
    }
0
добавлено
Спасибо огромное!
добавлено автор user2049166, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.

CSS — русскоговорящее сообщество
CSS — русскоговорящее сообщество
1 502 участник(ов)

Сообщество любителей CSS Возникли проблемы с CSS? – пиши сюда, обсудим и предложим самое лучшее решение Работа: @css_ru_jobs Правила: https://teletype.in/@css_ru/r1EWtQ2w7 Приходите в наши чаты @javascript_ru и @frontend_ru Флуд: @css_flood

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing

css_jobs
css_jobs
26 участник(ов)

Чат для вопросов по css и html: @css_ru Флуд: @css_flood Канал с вакансиями и резюме: @css_jobs_feed

css_флуд
css_флуд
10 участник(ов)