Pygame башня обороны игры, проблемы с поиском цели

У меня была проблема с неправильным идентификатором jQuery.

Вы можете загружать данные и файлы с помощью одной формы с помощью ajax.

PHP + HTML

<?php

print_r($_POST);
print_r($_FILES);
?>

<form id="data" method="post" enctype="multipart/form-data">
    <input type="text" name="first" value="Bob" />
    <input type="text" name="middle" value="James" />
    <input type="text" name="last" value="Smith" />
    <input name="image" type="file" />
    <button>Submit</button>
</form>

jQuery + Ajax

$("form#data").submit(function(e) {
    e.preventDefault();    
    var formData = new FormData(this);

    $.ajax({
        url: window.location.pathname,
        type: 'POST',
        data: formData,
        success: function (data) {
            alert(data)
        },
        cache: false,
        contentType: false,
        processData: false
    });
});

Короткая версия

$("form#data").submit(function(e) {
    e.preventDefault();
    var formData = new FormData(this);    

    $.post($(this).attr("action"), formData, function(data) {
        alert(data);
    });
});
2
задан skrx 13 July 2018 в 16:24
поделиться

1 ответ

Используйте формулу сглаживания расстояния для вычисления расстояний между двумя точками.

Это сделает так, чтобы вы всегда имели одно значение для расстояния и гарантировали у вас есть меньшее расстояние каждый раз. Прямо сейчас, если, например, один враг находится на расстоянии 1 по оси x от каждой башни, а все остальные находятся на расстоянии 2 по оси x, они никогда не будут выбраны, хотя они могут быть ближе

EDIT: Пожалуйста, используйте формулу выше, поскольку ваш расчет не является функцией расстояния. Также в вашей функции вы возвращаете e в первый раз, когда найдете что-то меньшее, чем ближе. Id делает так, чтобы ближайший был кортеж, удерживающий врага и расстояние, и поэтому ваш код должен быть

def find_target(tw):
    closest = (10000, None)
    for e in enemy_list:

            print("Checking distance for enemy", e)
            dx = tw.x - e.x
            dy = tw.y - e.y
            distance = math.hypot(dx, dy)
            if distance < closest[0]
                closest[0] = distance
                closest[1] = e

    print("Closest one is ",closest[1],"at distane",closest[0])
    return closest            
3
ответ дан Andre Motta 17 August 2018 в 12:36
поделиться
  • 1
    Скорее всего, это ... Большое спасибо – Havok224 13 July 2018 в 14:57
  • 2
    Похоже, это не то, что я действительно понял причину, но я не могу понять, почему. Он работает только для e в списке врагов, один раз он проверяет только 1 элемент не все 3 – Havok224 13 July 2018 в 15:21
  • 3
    Тем не менее я бы изменил функцию расстояния, потому что ваш расчет не является функцией расстояния. Причина в том, что ваше возвращение находится внутри цикла, а не в конце цикла. Вы не можете вернуться в первый раз, когда найдете элемент – Andre Motta 13 July 2018 в 16:08
  • 4
    @ Havok224 это, скорее всего, правильное решение. Если есть другие проблемы, вам нужно отправить сообщение mcve . Кстати, вы можете использовать math.hypot здесь: distance = math.hypot(dx, dy). – skrx 13 July 2018 в 16:44
  • 5
    Да, мой метод расчета был определенно ужасен, но я даже не заметил проблему с отступом. Еще раз спасибо. – Havok224 13 July 2018 в 16:46
Другие вопросы по тегам:

Похожие вопросы: