1

Тема: AHK: А минус Б равно ничего

При получении разницы переменных, про которые я точно знаю, что они существуют, и содержат числовые значения одного типа, я получаю пустое значение. Например:

Y1 = 42.489
Y2 = 42.444853

но

difY := Y1 - Y2
difY ;не содержит ничего.

Буквально,

MsgBox, %X1% %X2% %Y1% %Y2%
;вывод:
42.881 43.094363 64.784 65.719975

difX := X1 - X2
MsgBox, %difX%
;вывод:
-0.213363

но
difY := Y1 - Y2
MsgBox, %difY% ;ничего, даже не ноль

Всё это в соседних строках, потеряться-поменяться переменные не могли.

Это лечится вообще?

2

Re: AHK: А минус Б равно ничего

Нужно использовать знак := для присвоения значения.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: А минус Б равно ничего

Вы про это:

Y1 = 42.489
Y2 = 42.444853

?
Это не цитата из кода, это я неудачно сказал "есть переменные со значением ...". Там всё правильно.

4

Re: AHK: А минус Б равно ничего

Сейчас проверил, был неправ, работает даже так:

Y1 = 42.489
Y2 = 42.444853

difY := Y1 - Y2
MsgBox % difY
Qp пишет:

Там всё правильно

Если было бы всё правильно, и в переменных были бы числа, то выводилась бы разница в любом случае.
Приведите код, который может продемонстрировать проблему.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: Qp, 2024-06-18 16:10:57)

Re: AHK: А минус Б равно ничего

Как есть код длинный и путанный - кому надо в нём копаться?, а главное, его одного для отладки недостаточно, постараюсь дать представление:
Есть файл с координатами X и Y:

marshroute := "D:\AHK\routes.txt" ;типа:
63.090 37.145
63.104 37.189
63.130 37.270
63.146 37.354
63.146 37.442
63.119 37.517
63.071 37.558
63.021 37.597
62.970 37.639
62.920 37.678
62.865 37.698
62.808 37.688
62.753 37.667
62.696 37.644
62.638 37.633
62.580 37.641
62.521 37.658
62.466 37.685
62.413 37.721

Его я копирую в массив

marshrout := []
FileRead, marshrut, %marshroute%
Loop, Parse, marshrut, `n
	marshrout[A_Index] := A_LoopField

Копирую строку из массива по индексу:

point := marshrout[m]

Получаю из неё координаты:

Loop, Parse, point, %A_Space%
	{
	if (A_Index = 1)
		routesX := A_LoopField
	if (A_Index = 2)
		routesY := A_LoopField
	}

Получаю координаты из игры:

PixelGetColor, ColorX, 20, 87
PixelGetColor, ColorY, 25, 87
myX := ColorX/256/255*100
myY := ColorY/256/255*100

И определяю дистанцию:

distX := routesX - myX
distY := routesY - myY

И всё, приплыли, distY = "ничего".

6

Re: AHK: А минус Б равно ничего

Для тем по играм у нас есть специальная ветка.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: А минус Б равно ничего

Сейчас без компа, но скорее всего при изначальном парсинге у вас каждый раз кроме чисел в переменную ещё символ `r попадает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ Qp

8

Re: AHK: А минус Б равно ничего

teadrinker пишет:

скорее всего при изначальном парсинге у вас каждый раз кроме чисел в переменную ещё символ `r попадает

Да! Немного SubStr(), щепотка StringReplace - и всё заработало! Спасибо!

9

Re: AHK: А минус Б равно ничего

Проще так:

Loop, Parse, marshrut, `n, `r

А лучше так:

marshrut := StrSplit(marshrut, "`n", "`r")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: А минус Б равно ничего

Точно!