lil Toady Posted July 25, 2013 Share Posted July 25, 2013 Благодарю вас, данный код мне понадобится для других целей, но мне нужно чтобы резко изображение было, каждую секунду чтобы мигало, никак не переходило. 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
AriosJentu Posted July 26, 2013 Author Share Posted July 26, 2013 Благодарю вас, данный код мне понадобится для других целей, но мне нужно чтобы резко изображение было, каждую секунду чтобы мигало, никак не переходило. 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
AriosJentu Posted July 26, 2013 Author Share Posted July 26, 2013 Ещё вопрос 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
Kernell Posted July 26, 2013 Share Posted July 26, 2013 TraniLurese, Вы не внимательно читаете Wiki. dxDrawImage не возвращает элемент, поэтому и удалять нечего. Эта функция рисует изображение 1 раз, когда её вызвали (1 кадр). Поэтому её нужно вызывать каждый кадр. Соответственно чтобы НЕ рисовать, не нужно её вызывать вообще! Пересмотрите логику кода. P.S. getRootElement(getThisResource()) замените на resourceRoot Link to comment
AriosJentu Posted July 26, 2013 Author Share Posted July 26, 2013 Тогда как я могу нарисовать на экране изображение, а потмо через время его удалить? Link to comment
Other Languages Moderators Disinterpreter Posted July 26, 2013 Other Languages Moderators Share Posted July 26, 2013 Тогда как я могу нарисовать на экране изображение, а потмо через время его удалить? отменить событие например. Link to comment
Other Languages Moderators Disinterpreter Posted July 26, 2013 Other Languages Moderators Share Posted July 26, 2013 а какой функцией? https://wiki.multitheftauto.com/wiki/CancelEvent Link to comment
TheNormalnij Posted July 26, 2013 Share Posted July 26, 2013 Убрать обработчик события. removeEventHandler("onClientRender", resourceRoot, Edit) Link to comment
Kenix Posted July 26, 2013 Share Posted July 26, 2013 а какой функцией? https://wiki.multitheftauto.com/wiki/CancelEvent Оно неработает для всех событий. Читайте вики внимательнее. Link to comment
AriosJentu Posted July 30, 2013 Author Share Posted July 30, 2013 Сделал так 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
Stemka Posted July 30, 2013 Share Posted July 30, 2013 Сделал так 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
AriosJentu Posted July 30, 2013 Author Share Posted July 30, 2013 Сделал так 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
_Vincent_ Posted July 30, 2013 Share Posted July 30, 2013 Рискну предположить :DD Вдруг как здесь: viewtopic.php?f=141&t=62938 ? Link to comment
TheNormalnij Posted July 30, 2013 Share Posted July 30, 2013 Обычно, если, конечно, не всегда, вешают только только один обработчик '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
AriosJentu Posted July 30, 2013 Author Share Posted July 30, 2013 Обычно, если, конечно, не всегда, вешают только только один обработчик '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
Kenix Posted July 30, 2013 Share Posted July 30, 2013 onClientPlayerJoin вызывается для всех клиентов, кроме самого игрока, который зашел на сервер. Link to comment
AriosJentu Posted July 30, 2013 Author Share Posted July 30, 2013 onClientPlayerJoin вызывается для всех клиентов, кроме самого игрока, который зашел на сервер. а что за место этого можно использовать? Link to comment
Kenix Posted July 30, 2013 Share Posted July 30, 2013 Событие onClientResourceStart или вообще ничего, просто сам таймер вне всяких событий. Link to comment
AriosJentu Posted July 30, 2013 Author Share Posted July 30, 2013 Событие onClientResourceStart или вообще ничего, просто сам таймер вне всяких событий. ну вообще мне нужно чтобы при коннекте игрока был таймер, и данные изображения изменялись в зависимости таймера Link to comment
Kenix Posted July 30, 2013 Share Posted July 30, 2013 Вот вы присоединились к серверу, у вас будет изображение, а потом исчезнет. Вы этого ведь хотели? Значит я вам помог. Link to comment
TheNormalnij Posted July 30, 2013 Share Posted July 30, 2013 (edited) Событие onClientResourceStart или вообще ничего, просто сам таймер вне всяких событий. о, да чет не заметил -- координаты всех объектов на экране 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 July 30, 2013 by Guest Link to comment
Kenix Posted July 30, 2013 Share Posted July 30, 2013 onClientPlayerJoin вызывается для всех клиентов, кроме самого игрока, который зашел на сервер. Link to comment
TheNormalnij Posted July 30, 2013 Share Posted July 30, 2013 C-c-combo FAIL !!!11 onClientResourceStart и никаких проблем. Link to comment
AriosJentu Posted July 31, 2013 Author Share Posted July 31, 2013 Вот вы присоединились к серверу, у вас будет изображение, а потом исчезнет. Вы этого ведь хотели? Значит я вам помог. В этом конечно спасибо, но изображение не изчезает. 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