kevenvz Posted September 20, 2013 Share Posted September 20, 2013 Hello, I am bussy with an dx library(for my own creations) and I made this dxMoveElement. The problem is it won't remove the eventHandler. function dxMoveElement(dxElement,endX,endY,speed) local xx,yy = dxGetPosition(dxElement) moveDxElement = function() local x,y = dxGetPosition(dxElement) local movex,movey = false,false if (x ~= endX) then if (x > endX) then x = x - speed elseif(x < endX) then x = x + speed end else movex = true end if (y ~= endY) then if (y > endY) then y = y - speed elseif(y < endY) then y = y + speed end else movey = true end dxSetPosition(dxElement,x,y) if movex and movey then removeEventHandler("onClientRender",root,moveDxElement) outputDebugString("Done!") end end addEventHandler("onClientRender",root,moveDxElement) end It works for single Elements but when I do this: dxMoveElement(topBar, 0, 0, 1) dxMoveElement(topBarTextRight, 800, 5, 1) dxMoveElement(topBarTextLeft, 10, 5, 1) dxMoveElement(botBar, 0, 750, 5) dxMoveElement(statsButton, 10, 760, 5) It will bugg! Thanks! Link to comment
Gallardo9944 Posted September 20, 2013 Share Posted September 20, 2013 Why don't you just create a table, insert your "moveDxElement" function there each time and remove the handler when you need it? Link to comment
kevenvz Posted September 20, 2013 Author Share Posted September 20, 2013 Thanks! It works, but now I got this strange little bug when I start a resource(like runcode) it deletes all the elements. Code: For loop(Inside an onClientRender event) for num,dxElement in pairs(dxMoveTable) do if (dxElement.x > dxElement.endX) then dxElement.x = dxElement.x - dxElement.speed elseif (dxElement.x < dxElement.endX) then dxElement.x = dxElement.x + dxElement.speed end if (dxElement.y > dxElement.endY) then dxElement.y = dxElement.y - dxElement.speed elseif (dxElement.y < dxElement.endY) then dxElement.y = dxElement.y + dxElement.speed end if (dxElement.y == dxElement.endY) and (dxElement.x == dxElement.endX) then outputDebugString("Element moved!") table.remove(dxMoveTable,num) end dxSetPosition(dxElement.dxElement,dxElement.x,dxElement.y) end function dxMoveElement(dxElement,endX,endY,speed) local x,y = dxGetPosition(dxElement) table.insert(dxMoveTable,{ dxElement = dxElement, x = x, y = y, endX = endX, endY = endY, speed = speed}) end Link to comment
Gallardo9944 Posted September 20, 2013 Share Posted September 20, 2013 Supposedly, you are using onClientResourceStart with getRootElement at the same time. Probably that's why it triggers some unnecessary stuff. Link to comment
kevenvz Posted September 20, 2013 Author Share Posted September 20, 2013 No I am using onClientRender cause it is for all my ccreate dxElements Full onClientRender: addEventHandler("onClientRender",root, function() for _,dxElement in pairs(getElementsByType("dxRectangle")) do dxDrawRectangle(AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"height")),getElementData(dxElement,"color"),getElementData(dxElement,"postGUI")) end for _,dxElement in pairs(getElementsByType("dxImage")) do dxDrawImage(AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"height")),getElementData(dxElement,"image"),getElementData(dxElement,"rotation"),getElementData(dxElement,"rotationCenterOffsetX"),getElementData(dxElement,"rotationCenterOffsetY"),getElementData(dxElement,"color"),getElementData(dxElement,"postGUI")) end for _,dxElement in pairs(getElementsByType("dxButton")) do dxDrawImage(AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"height")),getElementData(dxElement,"image"),0,0,0,getElementData(dxElement,"color"),getElementData(dxElement,"postGUI")) dxDrawText(getElementData(dxElement,"text"),AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"x") + getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"y") + getElementData(dxElement,"height")),getElementData(dxElement,"color"),getElementData(dxElement,"scale"),getElementData(dxElement,"font"),getElementData(dxElement,"alignX"),getElementData(dxElement,"alignY"),false,false,getElementData(dxElement,"postGUI"),getElementData(dxElement,"colorCoded"),false) end for _,dxElement in pairs(getElementsByType("dxText")) do dxDrawText(getElementData(dxElement,"text"),AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"height")),getElementData(dxElement,"color"),getElementData(dxElement,"scale"),getElementData(dxElement,"font"),getElementData(dxElement,"alignX"),getElementData(dxElement,"alignY"),getElementData(dxElement,"clip"),getElementData(dxElement,"wordBreak"),getElementData(dxElement,"postGUI"),getElementData(dxElement,"colorCoded"),getElementData(dxElement,"subPixelPositioning")) end for num,dxElement in pairs(dxMoveTable) do if (dxElement.x > dxElement.endX) then dxElement.x = dxElement.x - dxElement.speed elseif (dxElement.x < dxElement.endX) then dxElement.x = dxElement.x + dxElement.speed end if (dxElement.y > dxElement.endY) then dxElement.y = dxElement.y - dxElement.speed elseif (dxElement.y < dxElement.endY) then dxElement.y = dxElement.y + dxElement.speed end if (dxElement.y == dxElement.endY) and (dxElement.x == dxElement.endX) then table.remove(dxMoveTable,num) end dxSetPosition(dxElement.dxElement,dxElement.x,dxElement.y) end end) 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