Jump to content

Проверка загрузки изображения (файла)


Recommended Posts

Доброго времени суток. Делал свой радар и столкнулся с проблемой отображения его у игроков. Радар использует одно большое изображение-карту в формате .jpg (2.5 МБ весом) и иногда у некоторых игроков вместо этой карты на радаре пустота, а в клиентском дебаге пишет ошибку error loading image. Я конечно понимаю что там какая-то ошибка при скачивании картинки, но почему это происходит далеко не всегда, и как вообще 100% проверить что картинка скачалась на клиенте и уже после этого стартовать функцию отрисовки радара? Помогите, очень надо...

Link to comment

Отрисовку нужно делать после вызова события onClientResourceStart (вызывается при старте ресурса на клиенте, загрузки всех файлов и скриптов). Потом уже добавлять обработчик addEventHandler для рендера.

А вообще нужно код смотреть, который вы не предоставили.

Link to comment

Структура кода примерно такая, т.е. функция стартует после старта самого ресурса, но все равно иногда эту 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

Возможно это может быть связано с тем, что у игроков медленный HDD и при вызове функции отрисовки, MTA просто не успевает прочитать такой большой файл за 1 кадр и отрисовать его.
Поэтому я бы вам посоветовал использовать функцию dxCreateTexture, чтобы создать текстуру один раз и её рисовать сколько угодно, благо она уже будет в памяти и доступ к ней будет быстрым, в отличии от HDD.

Edited by Kenix
Link to comment
On 12/20/2016 at 11:48 PM, Kenix said:

Возможно это может быть связано с тем, что у игроков медленный HDD и при вызове функции отрисовки, MTA просто не успевает прочитать такой большой файл за 1 кадр и отрисовать его.

Вы хотите сказать, что  dxDrawImage  каждый тик читает файл с диска, если указать путь? Это 100% или предположение?

Link to comment

Если не использовать dxCreateTexture, то да. Вы можете убедиться в этом сами, удалив файл из кэша, будет выведено много ошибок.

Edited by Kenix
Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...