Перейти к содержанию

Торможение игры при обработке массива


misha

Рекомендуемые сообщения

Здравствуйте!

Суть такова:

1) Ищу адреса в виде массива

2) По хоткею идет обработка массива вида:


for i=1, 30 do
writedouble (massiv_adresov[i], 100)
end

В игре происходит мини подвисание, в чем может быть причина?

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

Ссылка на комментарий
Поделиться на другие сайты

Я думаю тут можно поэкспериментировать в одном случае с pairs() и в другом с типами массива (числовой массив или строковый). В первом случае

Попробуй через pairs() по аналогии с этим примером


local array = {a="А", b="Б", c="В", d="Г", e="Д", f="Е"}
for key, value in pairs(array) do
print(key, value)
end

Во втором случае попробуй сделать чтобы адреса в массиве были только как number, т.е. числовые. Хотя адреса передаваемые в writedouble() могут быть в виде строки, тем не менее может быть и number-тип прокатит.

Ещё есть класс Strings и метод strings_getString(list, index) для взятия строки из массива строк (например строк-адресов)

Ещё есть вариант, что нет задержки между удержаниями горячих клавиш. Или не очень правильно составлен код проверки горячих клавиш (не оптимизирован).

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Тему не буду новую открывать, итак напостил)

Сталкивался уже давно, что дебаггер СЕ в скриптовом режиме плохо работает с высокочастотными инструкциями.

К примеру беру в игре адрес,

screenshotfjs.png

Выводит мне n-адресов. Пишу скрипт вида


function debugger_onBreakpoint()
debugState = 2

ONdebugger()
return 1
end
........
function ONdebugger(adres)
...............
adres0=EAX+10
print (adres0)
end

В итоге скрипт не выводит ничего.

Может есть какие-то скрытые параметры дебаггера СЕ или в чем может быть дело?

Ссылка на комментарий
Поделиться на другие сайты

Дело в том, что надо ставить брейкпоинт на инструкции (выделить её и нажать F5).

Когда брейкпоинт сработает, тогда сработает функция debugger_onBreakpoint()

Ссылка на комментарий
Поделиться на другие сайты

Дело в том, что надо ставить брейкпоинт на инструкции (выделить её и нажать F5).

Когда брейкпоинт сработает, тогда сработает функция debugger_onBreakpoint()

Аналогично, проверял, вручную тормозится на все ссылаемые адреса (последовательное нажатие ф9 после запуска брейкпойнта по ф5).

Инструкция ссылается на адреса около 2000раз в сек.

Ссылка на комментарий
Поделиться на другие сайты

Для чего нужно "ускорять" работу функции debugger_onBreakpoint()? Если в ней функциия print(), то естественно будет тормозить.

Ну допустим использование этой функции, даже пустой, нещадно тормозит игру. Если на одной инструкции куча вызовов и нужно профилировать какую-то информацию на этой инструкции, то ничего обычно не мешает сделать инъекцию кода с прыжком на новый написанный ассемблерный код анализирования данных регистров, стека и т.п. и когда что-то с чем-то совпадает не так часто, то можно сделать прыг на код с брейкпоинтом что приведёт к вызову debugger_onBreakpoint().

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.