Jump to content

Вопрос по функционалу МТА


Recommended Posts

Благодарю вас, данный код мне понадобится для других целей, но мне нужно чтобы резко изображение было, каждую секунду чтобы мигало, никак не переходило.
  
local tick, show = getTickCount, true 
addEventHandler ( "onClientRender", root 
    function() 
        if(getTickCount()-tick >= 1000) then  
            show = not show 
            tick = getTickCount() 
        end 
        if(show) then 
            dxDrawImage(...) 
        end 
    end 
) 

Секунду показывается изображение, секунду нет.

addEventHandler ( "onClientRender", root, function () 
    if ( getTickCount () % 2000 >= 1000 ) then 
      dxDrawImage ( ... ) 
    end 
end ) 

Link to comment
  • Replies 96
  • Created
  • Last Reply

Top Posters In This Topic

Благодарю вас, данный код мне понадобится для других целей, но мне нужно чтобы резко изображение было, каждую секунду чтобы мигало, никак не переходило.
  
local tick, show = getTickCount, true 
addEventHandler ( "onClientRender", root 
    function() 
        if(getTickCount()-tick >= 1000) then  
            show = not show 
            tick = getTickCount() 
        end 
        if(show) then 
            dxDrawImage(...) 
        end 
    end 
) 

Секунду показывается изображение, секунду нет.

Куча эрроров в дебаге

Благодарю вас, данный код мне понадобится для других целей, но мне нужно чтобы резко изображение было, каждую секунду чтобы мигало, никак не переходило.
  
local tick, show = getTickCount, true 
addEventHandler ( "onClientRender", root 
    function() 
        if(getTickCount()-tick >= 1000) then  
            show = not show 
            tick = getTickCount() 
        end 
        if(show) then 
            dxDrawImage(...) 
        end 
    end 
) 

Секунду показывается изображение, секунду нет.

addEventHandler ( "onClientRender", root, function () 
    if ( getTickCount () % 2000 >= 1000 ) then 
      dxDrawImage ( ... ) 
    end 
end ) 

Благодарю, работает

Link to comment

Ещё вопрос

local bat = {} 
function Edit() 
    --dxDrawImage(0, 0, 1280, 1024, "cam.png") 
    --dxDrawImage(1112, 67, getElementHealth (localPlayer), 20, "bar.jpg") 
    bat[1] = dxDrawImage(132, 932, 19, 27, "bat.png")  
    bat[2] = dxDrawImage(110, 932, 19, 27, "bat.png") 
    bat[3] = dxDrawImage( 88, 932, 19, 27, "bat.png") 
    bat[4] = dxDrawImage( 66, 932, 19, 27, "bat.png") 
end 
addEventHandler("onClientRender", getRootElement(getThisResource()), Edit) 
  
addEventHandler("onClientPlayerJoin", getRootElement(getThisResource()), 
    function() 
        setTimer(del1, 300000, 0) 
    end 
) 
function del1() 
    destroyElement(bat[1]) 
    setTimer(del2, 300000, 0) 
    outputChatBox("5 минут прошло") 
end 
function del2() 
    destroyElement(bat[2]) 
    setTimer(del3, 300000, 0) 
    outputChatBox("ещё 5 минут прошло") 
end 
function del3() 
    destroyElement(bat[3]) 
    setTimer(del4, 300000, 1) 
    outputChatBox("и ещё 5 минут прошло") 
end 
function del4() 
    destroyElement(bat[4]) 
    outputChatBox("последние 5 минут прошли") 
end 

вот данный код, сделанный мной. Он должен удалять по одному dxDraw'у каждые 5 минут. Ждал очень долго, но ничего не происходило. Решил домавить мессаги в чат, дабы проверить, выполняется ли таймер, но мессаги в чат тоже не отправлялись. У меня есть 2 предположения -

1) Поставил время, которое явно не равно 5ти минутам.

2) Таймер просто не выполняется при коннекте игрока.

Link to comment

TraniLurese,

Вы не внимательно читаете Wiki.

dxDrawImage не возвращает элемент, поэтому и удалять нечего. Эта функция рисует изображение 1 раз, когда её вызвали (1 кадр). Поэтому её нужно вызывать каждый кадр. Соответственно чтобы НЕ рисовать, не нужно её вызывать вообще!

Пересмотрите логику кода.

P.S. getRootElement(getThisResource()) замените на resourceRoot

Link to comment
  • Other Languages Moderators
Тогда как я могу нарисовать на экране изображение, а потмо через время его удалить?

отменить событие например.

Link to comment

Сделал так

function Edit() 
    dxDrawImage(0, 0, 1280, 1024, "cam.png") --основное изображение 
    dxDrawImage(1112, 67, getElementHealth (localPlayer), 20, "bar.jpg") --хелсбар, показывается в чётком месте на внешнем изображении 
end 
  
addEventHandler("onClientPlayerJoin", getRootElement(getThisResource()), function() setTimer(del1, 300000, 0) end) 
  
function draw1() dxDrawImage(132, 932, 19, 27, "bat.png") end -- первое изображение 
function draw2() dxDrawImage(110, 932, 19, 27, "bat.png") end 
function draw3() dxDrawImage( 88, 932, 19, 27, "bat.png") end 
function draw4() dxDrawImage( 66, 932, 19, 27, "bat.png") end -- четвёртое изображение 
  
addEventHandler("onClientRender", getRootElement(getThisResource()), draw1) 
addEventHandler("onClientRender", getRootElement(getThisResource()), draw2) 
addEventHandler("onClientRender", getRootElement(getThisResource()), draw3) 
addEventHandler("onClientRender", getRootElement(getThisResource()), draw4) 
addEventHandler("onClientRender", getRootElement(getThisResource()), Edit) 
  
function del1() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw1) setTimer(del2, 300000, 0) end 
function del2() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw2) setTimer(del3, 300000, 0) end 
function del3() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw3) setTimer(del4, 300000, 0) end 
function del4() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw4) end 

Но почему-то данные 4ре изображения показываются позади основного, и к тому-же после окончания 5й минуты ничего не убирается

Link to comment
Сделал так
function Edit() 
    dxDrawImage(0, 0, 1280, 1024, "cam.png") --основное изображение 
    dxDrawImage(1112, 67, getElementHealth (localPlayer), 20, "bar.jpg") --хелсбар, показывается в чётком месте на внешнем изображении 
end 
  
addEventHandler("onClientPlayerJoin", getRootElement(getThisResource()), function() setTimer(del1, 300000, 0) end) 
  
function draw1() dxDrawImage(132, 932, 19, 27, "bat.png") end -- первое изображение 
function draw2() dxDrawImage(110, 932, 19, 27, "bat.png") end 
function draw3() dxDrawImage( 88, 932, 19, 27, "bat.png") end 
function draw4() dxDrawImage( 66, 932, 19, 27, "bat.png") end -- четвёртое изображение 
  
addEventHandler("onClientRender", getRootElement(getThisResource()), draw1) 
addEventHandler("onClientRender", getRootElement(getThisResource()), draw2) 
addEventHandler("onClientRender", getRootElement(getThisResource()), draw3) 
addEventHandler("onClientRender", getRootElement(getThisResource()), draw4) 
addEventHandler("onClientRender", getRootElement(getThisResource()), Edit) 
  
function del1() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw1) setTimer(del2, 300000, 0) end 
function del2() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw2) setTimer(del3, 300000, 0) end 
function del3() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw3) setTimer(del4, 300000, 0) end 
function del4() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw4) end 

Но почему-то данные 4ре изображения показываются позади основного, и к тому-же после окончания 5й минуты ничего не убирается

Потому что основное создаетсья позже твоих "неосновных" изображений

17 и 13 строчку местами поменяй, и все дела:)

Link to comment
Сделал так
function Edit() 
    dxDrawImage(0, 0, 1280, 1024, "cam.png") --основное изображение 
    dxDrawImage(1112, 67, getElementHealth (localPlayer), 20, "bar.jpg") --хелсбар, показывается в чётком месте на внешнем изображении 
end 
  
addEventHandler("onClientPlayerJoin", getRootElement(getThisResource()), function() setTimer(del1, 300000, 0) end) 
  
function draw1() dxDrawImage(132, 932, 19, 27, "bat.png") end -- первое изображение 
function draw2() dxDrawImage(110, 932, 19, 27, "bat.png") end 
function draw3() dxDrawImage( 88, 932, 19, 27, "bat.png") end 
function draw4() dxDrawImage( 66, 932, 19, 27, "bat.png") end -- четвёртое изображение 
  
addEventHandler("onClientRender", getRootElement(getThisResource()), draw1) 
addEventHandler("onClientRender", getRootElement(getThisResource()), draw2) 
addEventHandler("onClientRender", getRootElement(getThisResource()), draw3) 
addEventHandler("onClientRender", getRootElement(getThisResource()), draw4) 
addEventHandler("onClientRender", getRootElement(getThisResource()), Edit) 
  
function del1() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw1) setTimer(del2, 300000, 0) end 
function del2() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw2) setTimer(del3, 300000, 0) end 
function del3() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw3) setTimer(del4, 300000, 0) end 
function del4() removeEventHandler("onClientRender", getRootElement(getThisResource()), draw4) end 

Но почему-то данные 4ре изображения показываются позади основного, и к тому-же после окончания 5й минуты ничего не убирается

Потому что основное создаетсья позже твоих "неосновных" изображений

17 и 13 строчку местами поменяй, и все дела:)

ок, понятно. А почему не убирается то? Таймер вроде должен действовать

Link to comment

Обычно, если, конечно, не всегда, вешают только только один обработчик 'onClientRender' для создания разного кол-ва изображений. Так можно довольно наглядно понять, как все рисуется. То, что выше, будет на задних планах, что ниже - на переднем.

  
local currentBats = 4 
local bats = { 
  [1] = { 132, 932, 19, 27 }; 
  [2] = { 110, 932, 19, 27 }; 
  [3] = { 88,  932, 19, 27  }; 
  [4] = { 66,  932, 19, 27  }; 
  } 
  
function Edit() 
    dxDrawImage(0, 0, 1280, 1024, "cam.png") --основное изображение 
    dxDrawImage(1112, 67, getElementHealth (localPlayer), 20, "bar.jpg") --хелсбар, показывается в чётком месте на внешнем изображении 
end 
addEventHandler("onClientRender", root, Edit) 
  
function draw() 
  for i = 1, currentBats do 
  -- можно использовать так же обратный цикл  
  -- for  i =  currentBats, 1, -1 do 
    dxDrawImage( bats[i][1], bats[i][2], bats[i][3], bats[i][4], "bat.png") 
  end 
end 
addEventHandler("onClientRender", root, draw) 
  
function delete() 
  currentBats = currentBats - 1 
  if currentBats == 0 then 
    removeEventHandler("onClientRender", root, draw) 
  end 
end 
  
addEventHandler( "onClientPlayerJoin", root, function() 
  setTimer( delete, 300000, 4 )  -- 0 - выполнение бесконечно, 4 - 4 раза 
end )  

Link to comment
Обычно, если, конечно, не всегда, вешают только только один обработчик 'onClientRender' для создания разного кол-ва изображений. Так можно довольно наглядно понять, как все рисуется. То, что выше, будет на задних планах, что ниже - на переднем.
  
local currentBats = 4 
local bats = { 
  [1] = { 132, 932, 19, 27 }; 
  [2] = { 110, 932, 19, 27 }; 
  [3] = { 88,  932, 19, 27  }; 
  [4] = { 66,  932, 19, 27  }; 
  } 
  
function Edit() 
    dxDrawImage(0, 0, 1280, 1024, "cam.png") --основное изображение 
    dxDrawImage(1112, 67, getElementHealth (localPlayer), 20, "bar.jpg") --хелсбар, показывается в чётком месте на внешнем изображении 
end 
addEventHandler("onClientRender", root, Edit) 
  
function draw() 
  for i = 1, currentBats do 
  -- можно использовать так же обратный цикл  
  -- for  i =  currentBats, 1, -1 do 
    dxDrawImage( bats[i][1], bats[i][2], bats[i][3], bats[i][4], "bat.png") 
  end 
end 
addEventHandler("onClientRender", root, draw) 
  
function delete() 
  currentBats = currentBats - 1 
  if currentBats == 0 then 
    removeEventHandler("onClientRender", root, draw) 
  end 
end 
  
addEventHandler( "onClientPlayerJoin", root, function() 
  setTimer( delete, 300000, 4 )  -- 0 - выполнение бесконечно, 4 - 4 раза 
end )  

Благодарю, но не сработало, жду более 5 минут, и всё равно не отключается одно из делений, ничего просто не происходит.

_______________-Добавлю-_____________

PS - внимательно посмотрев код, ты отнимаешь по одному делению, то-есть каждые 5 минут ты удаляешь у значения currentBats 1 значение, и проверяешь, равно ли это значение нулю, и если да, то удаляешь, но стартовое значение = 4, следовательно я должен 5*4 умножить, чтобы получить у currentBats значение 0, 20 минут ожидания. После него удалится полностью функция draw. Мне нужно не так. Мне нужно чтобы каждые 5 минут убиралась одна картинка.

И ещё

Даже через 20 минут ничего не произошло

Link to comment
Событие onClientResourceStart или вообще ничего, просто сам таймер вне всяких событий.

ну вообще мне нужно чтобы при коннекте игрока был таймер, и данные изображения изменялись в зависимости таймера

Link to comment

Вот вы присоединились к серверу, у вас будет изображение, а потом исчезнет. Вы этого ведь хотели? Значит я вам помог.

Link to comment
Событие onClientResourceStart или вообще ничего, просто сам таймер вне всяких событий.

о, да чет не заметил :D

  
-- координаты всех объектов на экране 
local bats = { 
  [1] = { 132, 932, 19, 27 }; 
  [2] = { 110, 932, 19, 27 }; 
  [3] = { 88,  932, 19, 27  }; 
  [4] = { 66,  932, 19, 27  }; 
  } 
-- Чуть оптимизировал, узнаем их кол-во  
local currentBats = #bats 
  
function Edit() 
    dxDrawImage(0, 0, 1280, 1024, "cam.png") --основное изображение 
    dxDrawImage(1112, 67, getElementHealth (localPlayer), 20, "bar.jpg") --хелсбар, показывается в чётком месте на внешнем изображении 
end 
addEventHandler("onClientRender", root, Edit) 
  
function draw() 
  --тут проходим по циклу в таблице от первого значения, до currentBats 
  for i = 1, currentBats do 
  -- можно использовать так же обратный цикл 
  -- for  i =  currentBats, 1, -1 do 
    dxDrawImage( bats[i][1], bats[i][2], bats[i][3], bats[i][4], "bat.png") 
  end 
end 
addEventHandler("onClientRender", root, draw) 
  
function delete() 
  --сюда ведет таймер из-за которого мы уменьшаем значение currentBats, чтобы цикл рисовал меньше объектов 
  currentBats = currentBats - 1 
  if currentBats == 0 then 
    removeEventHandler("onClientRender", root, draw) 
  end 
end 
  
addEventHandler( "onClientResourceStart", root, function() 
  setTimer( delete, 15000, currentBats )  
end )  

Edited by Guest
Link to comment
Вот вы присоединились к серверу, у вас будет изображение, а потом исчезнет. Вы этого ведь хотели? Значит я вам помог.

В этом конечно спасибо, но изображение не изчезает.

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...