У меня была проблема с неправильным идентификатором 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);
});
});
Используйте формулу сглаживания расстояния для вычисления расстояний между двумя точками.
Это сделает так, чтобы вы всегда имели одно значение для расстояния и гарантировали у вас есть меньшее расстояние каждый раз. Прямо сейчас, если, например, один враг находится на расстоянии 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
math.hypot
здесь:distance = math.hypot(dx, dy)
. – skrx 13 July 2018 в 16:44