Skylarker Posted December 20, 2016 Share Posted December 20, 2016 Доброго времени суток. Делал свой радар и столкнулся с проблемой отображения его у игроков. Радар использует одно большое изображение-карту в формате .jpg (2.5 МБ весом) и иногда у некоторых игроков вместо этой карты на радаре пустота, а в клиентском дебаге пишет ошибку error loading image. Я конечно понимаю что там какая-то ошибка при скачивании картинки, но почему это происходит далеко не всегда, и как вообще 100% проверить что картинка скачалась на клиенте и уже после этого стартовать функцию отрисовки радара? Помогите, очень надо... Link to comment
Kenix Posted December 20, 2016 Share Posted December 20, 2016 Отрисовку нужно делать после вызова события onClientResourceStart (вызывается при старте ресурса на клиенте, загрузки всех файлов и скриптов). Потом уже добавлять обработчик addEventHandler для рендера. А вообще нужно код смотреть, который вы не предоставили. Link to comment
Skylarker Posted December 20, 2016 Author Share Posted December 20, 2016 Структура кода примерно такая, т.е. функция стартует после старта самого ресурса, но все равно иногда эту 2.5 МБ картинку может не докачать или что я не знаю. Проверял даже с одной картинкой (без рамок, блипов и прочего для радара), все равно бывает у некоторых пустота с этой ошибкой... addEventHandler( "onClientResourceStart", resourceRoot, function ( startedRes ) addEventHandler("onClientRender",root,drawRadar) end ) local screenW,screenH = guiGetScreenSize() local sx, sy = (screenW/1024), (screenH/768) function drawRadar() dxDrawImage(20*sx, 480*sy, 300*sx, 180*sy, "images/radar.jpg", 0,0,0) end Link to comment
Kenix Posted December 20, 2016 Share Posted December 20, 2016 (edited) Возможно это может быть связано с тем, что у игроков медленный HDD и при вызове функции отрисовки, MTA просто не успевает прочитать такой большой файл за 1 кадр и отрисовать его. Поэтому я бы вам посоветовал использовать функцию dxCreateTexture, чтобы создать текстуру один раз и её рисовать сколько угодно, благо она уже будет в памяти и доступ к ней будет быстрым, в отличии от HDD. Edited December 20, 2016 by Kenix Link to comment
Hitori Posted December 26, 2016 Share Posted December 26, 2016 On 12/20/2016 at 11:48 PM, Kenix said: Возможно это может быть связано с тем, что у игроков медленный HDD и при вызове функции отрисовки, MTA просто не успевает прочитать такой большой файл за 1 кадр и отрисовать его. Вы хотите сказать, что dxDrawImage каждый тик читает файл с диска, если указать путь? Это 100% или предположение? Link to comment
Kenix Posted December 26, 2016 Share Posted December 26, 2016 (edited) Если не использовать dxCreateTexture, то да. Вы можете убедиться в этом сами, удалив файл из кэша, будет выведено много ошибок. Edited December 26, 2016 by Kenix Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now