Jump to content

x[ مساعدة ]x فاكشن dxDrawCircle


iiv03

Recommended Posts

:hello1:  سلآم عليكم

مسآعده كل م اجي احاول احط الدآئره علي 270 درجه تجني مثل ب صوره

 

zf8jyut7lev7.png

 

:help:الي آنا ابغاه تجي مثل كذأ

bgxhayid0mji.png

الكود

function dxDrawCircle( posX, posY, radius, width, angleAmount, startAngle, stopAngle, color, postGUI )
	if ( type( posX ) ~= "number" ) or ( type( posY ) ~= "number" ) then
		return false
	end
	
	local function clamp( val, lower, upper )
		if ( lower > upper ) then lower, upper = upper, lower end
		return math.max( lower, math.min( upper, val ) )
	end
	
	radius = type( radius ) == "number" and radius or 50
	width = type( width ) == "number" and width or 5
	angleAmount = type( angleAmount ) == "number" and angleAmount or 1
	startAngle = clamp( type( startAngle ) == "number" and startAngle or 0, 0, 270 )
	stopAngle = clamp( type( stopAngle ) == "number" and stopAngle or 270, 0, 270 )
	color = color or tocolor( 255, 255, 255, 200 )
	postGUI = type( postGUI ) == "boolean" and postGUI or false
	
	if ( stopAngle < startAngle ) then
		local tempAngle = stopAngle
		stopAngle = startAngle
		startAngle = tempAngle
	end
	
	for i = startAngle, stopAngle, angleAmount do
		local startX = math.cos( math.rad( i ) ) * ( radius - width )
		local startY = math.sin( math.rad( i ) ) * ( radius - width )
		local endX = math.cos( math.rad( i ) ) * ( radius + width )
		local endY = math.sin( math.rad( i ) ) * ( radius + width )
	
		dxDrawLine( startX + posX, startY + posY, endX + posX, endY + posY, color, width, postGUI )
	end
	
	return true
end

function hudcircle()

		dxDrawCircle(565, 233, 20, 1, 1, 0, 360, tocolor(255, 50, 50))
	end
addEventHandler("onClientRender", root, hudcircle)

 

Edited by liwahadri
Link to comment
  On 15/08/2019 at 10:00, HassoN said:

بدل هل تعقيد واخرتها يطلع شكلها مب حلو ، جيب صورة دائرة وخليها تلف اسهل بالف مرة

Expand  

المشكله لفه صعبه لو اسويه والمشكله ثاني الصوره اكيد بتفرق ب كل ريزلوشن :'(

 

Link to comment
  On 15/08/2019 at 10:43, liwahadri said:

المشكله لفه صعبه لو اسويه والمشكله ثاني الصوره اكيد بتفرق ب كل ريزلوشن :'(

 

Expand  

1) لو بتسويها بطريقتك ذي ، برضو لازم شوية حسابات عشان تعرف تخلي الدائرة ذي تلف ، لازم تقعد تضيف كل شوية على الـ

startAngle + stopAngle 

بصورة تبان كانها تلف و بـ انسيابية

2) حتى طريقتك ذي مابتجي على كل الشاشات طبعاً ، فـ ذي مو نقطة ايجابية لطريقتك

 

dxDrawImage ولو جينا نسوي صورة تلف اسهل بالف مرة من الفنكشن ذا عشان فيه ارقمنت خاص لل روتيشن بالـ 

حاول تسوي اي شي وبساعدك فيه ان شاء الله

Link to comment
  On 15/08/2019 at 12:28, HassoN said:

1) لو بتسويها بطريقتك ذي ، برضو لازم شوية حسابات عشان تعرف تخلي الدائرة ذي تلف ، لازم تقعد تضيف كل شوية على الـ

startAngle + stopAngle 

بصورة تبان كانها تلف و بـ انسيابية

2) حتى طريقتك ذي مابتجي على كل الشاشات طبعاً ، فـ ذي مو نقطة ايجابية لطريقتك

 

dxDrawImage ولو جينا نسوي صورة تلف اسهل بالف مرة من الفنكشن ذا عشان فيه ارقمنت خاص لل روتيشن بالـ 

حاول تسوي اي شي وبساعدك فيه ان شاء الله

Expand  

اخوي حسين لو سمحت كيف اسوي الاحمر مثل ب صوره الحين بس علي dxDrawImage

m3h0zhj0fsas.png

لو يتحرك يصير كذا

50py00vrg6di.png

صوره تعبان :lol:

Edited by liwahadri
Link to comment
  On 15/08/2019 at 13:06, HassoN said:

امسك ذي الصورة وحطها مع الكود ذا

 

G1UWHAK.png

 

local x, y = guiGetScreenSize()
local rotation = 0

function renderMyCircle()
	if (rotation >= 360) then
		rotation = 0
	end
	rotation = rotation + 1
	dxDrawImage(x/2, y-y/10, 70, 70, "circle.png", rotation, 0, 0, tocolor(255, 255, 255, 255), false)
end
addEventHandler("onClientRender", root, renderMyCircle)

 

Expand  

قصدي مثل nos او health

تتحرك كامل :]

شكله ماتنفع الا مع dxDrawCircle

Edited by liwahadri
Link to comment
  On 15/08/2019 at 13:16, HassoN said:

تبغاها تتحرك كامل وبعدها توقف يعني؟ وريني مثال مو فاهم منك شي

Expand  

i3gcw7vxh2h6.png

 

كذا >

تصير كذا بعدين<

 

 

0liec51rwek2.png

 

 

لو اخذت نيترو تتحرك الدآئره زرقاء اتمنى فهمتني

المشكله الدآئره شكله خايس من الجوده هل فيه كود او شي يصلح الجوده؟

 

الكود حقي مسويه

	if target and getElementType(target) == "vehicle" then
		localp = getVehicleOccupant(target)
	else
		localp = getLocalPlayer()
	end
	if(not localp) then return; end
	local x, y, z = getElementPosition(localp)
	local pr = getPedRotation(localp)
	local _,_,playerRotation = getElementRotation(localp)
	local px,py,pz = getElementPosition(localp)
	if(getPedOccupiedVehicle(localp)) then
		local veh = getPedOccupiedVehicle(localp);

 

Edited by liwahadri
Link to comment

الدائرة ذي صورة؟ لو صورة عدلها بالفوتوشوب 

وبالنسبة لطلبك ، ارجع استعمل كودك الاصلي وحاول تعدل بال

startAngle, stopAngle

لين مايوصل للشكل الي يعجبك

Link to comment
  On 15/08/2019 at 13:44, HassoN said:

الدائرة ذي صورة؟ لو صورة عدلها بالفوتوشوب 

وبالنسبة لطلبك ، ارجع استعمل كودك الاصلي وحاول تعدل بال

startAngle, stopAngle

لين مايوصل للشكل الي يعجبك

Expand  

المشكله تحس الخط الي علي الصوره كآنه مرسوم :'(

يب هاذي صوره الي ورا الخط الازرق بس الخط الازرق

dxdrawcircle

هل فيه حل ؟

الكود

function dxDrawCircle( x, y, width, height, color, angleStart, angleSweep, borderWidth )
	height = height or width
	color = color or tocolor(255,255,255)
	borderWidth = borderWidth or 1e9
	angleStart = angleStart or 0
	angleSweep = angleSweep or 360 - angleStart
	if ( angleSweep < 360 ) then
		angleEnd = math.fmod( angleStart + angleSweep, 360 ) + 0
	else
		angleStart = 0
		angleEnd = 360
	end
	x = x - width / 2
	y = y - height / 2
	if not circleShader then
		circleShader = dxCreateShader ( "circle.fx" )
	end
	dxSetShaderValue ( circleShader, "sCircleWidthInPixel", width );
	dxSetShaderValue ( circleShader, "sCircleHeightInPixel", height );
	
	dxSetShaderValue ( circleShader, "sBorderWidthInPixel", borderWidth );
	dxSetShaderValue ( circleShader, "sAngleStart", math.rad( angleStart ) - math.pi );
	dxSetShaderValue ( circleShader, "sAngleEnd", math.rad( angleEnd ) - math.pi );
	dxDrawImage( x, y, width, height, circleShader, 0, 0, 0, color )
end


function drawCircleHud()
	if target and getElementType(target) == "vehicle" then
		localp = getVehicleOccupant(target)
	else
		localp = getLocalPlayer()
	end
	if(not localp) then return; end
	local x, y, z = getElementPosition(localp)
	local pr = getPedRotation(localp)
	local _,_,playerRotation = getElementRotation(localp)
	local px,py,pz = getElementPosition(localp)
	if(getPedOccupiedVehicle(localp)) then
		local veh = getPedOccupiedVehicle(localp);
	dxDrawCircle( 1212, 672, 45, height, tocolor(0,0,255),angleStart,360, 2.5 )
 -- dxDrawImageSection(400, 200, 50, 50, 10, 0, 64, 64, 'circle.png', vehiclehealth, 0, 0, tocolor(255,0 ,0))
	end
addEventHandler("onClientRender", root, drawCircleHud)

 

Link to comment
function createCircle(text,posX,posY,radius,startAngle,stopAngle,color,Sezi)
dxDrawCircle(posX,posY,radius, 0,360, tocolor(0,0,0,255), tocolor(0,0,0,255))
dxDrawCircle (posX,posY,radius+Sezi,startAngle,stopAngle,color,tocolor(255,255,255,255),nil, 1)
dxDrawCircle(posX,posY, radius, 0,360, tocolor(0,0,0,255), tocolor(0,0,0,255))
dxDrawText(text,posX-30,posY-4,radius+posX,radius+posY,color)
end
---- #Code
addEventHandler("onClientRender", root, function ()
local Vehs = getPedOccupiedVehicle(localPlayer)
local nitros = getVehicleNitroLevel(Vehs) or 0
if Vehs and nitros then
createCircle(math.ceil(nitros*100).."% Nitro",500,400,50,1,nitros/2*725,tocolor(0,5,255,255),5)
-- Health Car
local Health = getElementHealth (Vehs) Healths = math.ceil(Health/10)
createCircle(Healths.."% Health",800,400,50,1,(Health-250)/2,tocolor(0,255,0,255),5)
if Healths < 50 then
createCircle(Healths.."% Health",800,400,50,1,(Health-250)/2,tocolor(255,0,0,255),5)
end
end
end)

قصدك كدا ؟

Link to comment
  On 15/08/2019 at 17:37, #\_oskar_/# said:
function createCircle(text,posX,posY,radius,startAngle,stopAngle,color,Sezi)
dxDrawCircle(posX,posY,radius, 0,360, tocolor(0,0,0,255), tocolor(0,0,0,255))
dxDrawCircle (posX,posY,radius+Sezi,startAngle,stopAngle,color,tocolor(255,255,255,255),nil, 1)
dxDrawCircle(posX,posY, radius, 0,360, tocolor(0,0,0,255), tocolor(0,0,0,255))
dxDrawText(text,posX-30,posY-4,radius+posX,radius+posY,color)
end
---- #Code
addEventHandler("onClientRender", root, function ()
local Vehs = getPedOccupiedVehicle(localPlayer)
local nitros = getVehicleNitroLevel(Vehs) or 0
if Vehs and nitros then
createCircle(math.ceil(nitros*100).."% Nitro",500,400,50,1,nitros/2*725,tocolor(0,5,255,255),5)
-- Health Car
local Health = getElementHealth (Vehs) Healths = math.ceil(Health/10)
createCircle(Healths.."% Health",800,400,50,1,(Health-250)/2,tocolor(0,255,0,255),5)
if Healths < 50 then
createCircle(Healths.."% Health",800,400,50,1,(Health-250)/2,tocolor(255,0,0,255),5)
end
end
end)

قصدك كدا ؟

Expand  

شوف هنا كيف

iu6nfg54lblh.png

وشوف حقتي كيف

q0m2at881r2m.png

مدري ليش الجوده حق dxDrawCircle خرا

آتوقع لازم شيدر؟؟

Edited by liwahadri
Link to comment

function dxDrawShaderCircle( x, y, width, height, color, angleStart, angleSweep, borderWidth ) 
    height = height or width 
    color = color or tocolor(255,255,255) 
    borderWidth = borderWidth or 1e9 
    angleStart = angleStart or 0 
    angleSweep = angleSweep or 360 - angleStart 
    if ( angleSweep < 360 ) then 
        angleEnd = math.fmod( angleStart + angleSweep, 360 ) + 0 
    else 
        angleStart = 0 
        angleEnd = 360 
    end 
    x = x - width / 2 
    y = y - height / 2 
    if not circleShader then 
        circleShader = dxCreateShader ( "circle.fx" ) 
    end 
    dxSetShaderValue ( circleShader, "sCircleWidthInPixel", width ); 
    dxSetShaderValue ( circleShader, "sCircleHeightInPixel", height ); 
    dxSetShaderValue ( circleShader, "sBorderWidthInPixel", borderWidth ); 
    dxSetShaderValue ( circleShader, "sAngleStart", math.rad( angleStart ) - math.pi ); 
    dxSetShaderValue ( circleShader, "sAngleEnd", math.rad( angleEnd ) - math.pi ); 
    dxDrawImage( x, y, width, height, circleShader, 0, 0, 0, color ) 
end 


local sw,sh = guiGetScreenSize();
local x,y=sw/1.2,sh/1.1;
local width,height=60,60;

addEventHandler("onClientRender",root,
	function()
		dxDrawCircle(x,y,(width/2)-2,0,360,tocolor(33,33,33))
		dxDrawText("Nitro",x-11.4,y-5.5,x+width,y+height);
		local vehicle = getPedOccupiedVehicle(localPlayer);
		if vehicle then
			circleCounter = (360 * (isVehicleHasNitro(vehicle) and getVehicleNitroLevel (vehicle) or 0));
			if isVehicleHasNitro(vehicle) then
				dxDrawShaderCircle(x,y,width,height,tocolor(0,0,255),0,circleCounter,5); 
			end
		end
		
	end
);



function isVehicleHasNitro(vehicle)
	if vehicle and getElementType(vehicle)=="vehicle" then
		local upgrades = getVehicleUpgrades (vehicle)
		for _, upgrade in ipairs ( upgrades ) do
			if getVehicleUpgradeSlotName(upgrade) == "Nitro" then
				return upgrade;
			end
		end
		return false
	end
	return false
end

 

Link to comment
  On 15/08/2019 at 22:35, NX_CI said:

function dxDrawShaderCircle( x, y, width, height, color, angleStart, angleSweep, borderWidth ) 
    height = height or width 
    color = color or tocolor(255,255,255) 
    borderWidth = borderWidth or 1e9 
    angleStart = angleStart or 0 
    angleSweep = angleSweep or 360 - angleStart 
    if ( angleSweep < 360 ) then 
        angleEnd = math.fmod( angleStart + angleSweep, 360 ) + 0 
    else 
        angleStart = 0 
        angleEnd = 360 
    end 
    x = x - width / 2 
    y = y - height / 2 
    if not circleShader then 
        circleShader = dxCreateShader ( "circle.fx" ) 
    end 
    dxSetShaderValue ( circleShader, "sCircleWidthInPixel", width ); 
    dxSetShaderValue ( circleShader, "sCircleHeightInPixel", height ); 
    dxSetShaderValue ( circleShader, "sBorderWidthInPixel", borderWidth ); 
    dxSetShaderValue ( circleShader, "sAngleStart", math.rad( angleStart ) - math.pi ); 
    dxSetShaderValue ( circleShader, "sAngleEnd", math.rad( angleEnd ) - math.pi ); 
    dxDrawImage( x, y, width, height, circleShader, 0, 0, 0, color ) 
end 


local sw,sh = guiGetScreenSize();
local x,y=sw/1.2,sh/1.1;
local width,height=60,60;

addEventHandler("onClientRender",root,
	function()
		dxDrawCircle(x,y,(width/2)-2,0,360,tocolor(33,33,33))
		dxDrawText("Nitro",x-11.4,y-5.5,x+width,y+height);
		local vehicle = getPedOccupiedVehicle(localPlayer);
		if vehicle then
			circleCounter = (360 * (isVehicleHasNitro(vehicle) and getVehicleNitroLevel (vehicle) or 0));
			if isVehicleHasNitro(vehicle) then
				dxDrawShaderCircle(x,y,width,height,tocolor(0,0,255),0,circleCounter,5); 
			end
		end
		
	end
);



function isVehicleHasNitro(vehicle)
	if vehicle and getElementType(vehicle)=="vehicle" then
		local upgrades = getVehicleUpgrades (vehicle)
		for _, upgrade in ipairs ( upgrades ) do
			if getVehicleUpgradeSlotName(upgrade) == "Nitro" then
				return upgrade;
			end
		end
		return false
	end
	return false
end

 

Expand  

آتوقع ماتغير شي

Link to comment
  On 15/08/2019 at 23:05, NX_CI said:

كيف ماتغير شي يعني انت مسويه من قبل ؟

Expand  

 

السالفه طلعت من

antialias

بس فيه مشكله ثاني تصير دائره كامله مساعده بالله كيف احطه علي شكل خط؟

local floor = math.floor
function fromColor(col)
	local r,g,b,a
	b = col%256
	g = floor(col/0x100)%256
	r = floor(col/0x10000)%256
	a = floor(col/0x1000000)%256
	return r,g,b,a
end

local shader = dxCreateShader( "circle.fx" )
local shaderColCache = {}
function dxDrawCircleShader(posX,posY,radius,color1,color2,antialias)
	assert(type(color1) == "number", "Expected number as color argument to dxDrawCircleShader")
	if (not color2) or (color2 == color1) then color2 = "def" end

	local finColor
	local col1 = shaderColCache[color1]
	if col1 then
		local col2 = col1[color2]
		if col2 then
			finColor = col2
		end
	end

	if not finColor then
		shaderColCache[color1] = shaderColCache[color1] or {}
		local twoColors = (color2 ~= "def")
		if twoColors then
			local r1,g1,b1,a1 = fromColor(color1)
			local r2,g2,b2,a2 = fromColor(color2)
			local finR = floor((r1/256)*16)*16 + floor((r2/256)*16)
			local finG = floor((g1/256)*16)*16 + floor((g2/256)*16)
			local finB = floor((b1/256)*16)*16 + floor((b2/256)*16)
			local finA = floor((a1/256)*8)*32 + floor((a2/256)*8)*4 + 2
			finColor = tocolor( finR, finG, finB, finA )
		else
			local r,g,b,a = fromColor(color1)
			local finA = (floor((a/256)*64)*4)%256
			finColor = tocolor( r,g,b, finA )
		end
		shaderColCache[color1][color2] = finColor
	end

	local antialiasComp = 16777216
	if not antialias then antialiasComp = 0 end
	finColor = finColor + antialiasComp
	dxDrawImage( posX-radius, posY-radius, radius*2, radius*2, shader, nil, nil,  finColor )
end
addEventHandler("onClientRender",root,
	function()
	dxDrawCircleShader(500,200,60,tocolor(255,255,255),tocolor(255,255,255),1)
	end
)

 

nyxvlt536yqh.png

 

Edited by liwahadri
Link to comment

ممكن تفهمني ايش التغيير اللي حصل في الكود هذا ^

  On 15/08/2019 at 23:09, liwahadri said:

 

السالفه طلعت من

antialias

بس فيه مشكله ثاني تصير دائره كامله مساعده بالله كيف احطه علي شكل خط؟


local floor = math.floor
function fromColor(col)
	local r,g,b,a
	b = col%256
	g = floor(col/0x100)%256
	r = floor(col/0x10000)%256
	a = floor(col/0x1000000)%256
	return r,g,b,a
end

local shader = dxCreateShader( "circle.fx" )
local shaderColCache = {}
function dxDrawCircleShader(posX,posY,radius,color1,color2,antialias)
	assert(type(color1) == "number", "Expected number as color argument to dxDrawCircleShader")
	if (not color2) or (color2 == color1) then color2 = "def" end

	local finColor
	local col1 = shaderColCache[color1]
	if col1 then
		local col2 = col1[color2]
		if col2 then
			finColor = col2
		end
	end

	if not finColor then
		shaderColCache[color1] = shaderColCache[color1] or {}
		local twoColors = (color2 ~= "def")
		if twoColors then
			local r1,g1,b1,a1 = fromColor(color1)
			local r2,g2,b2,a2 = fromColor(color2)
			local finR = floor((r1/256)*16)*16 + floor((r2/256)*16)
			local finG = floor((g1/256)*16)*16 + floor((g2/256)*16)
			local finB = floor((b1/256)*16)*16 + floor((b2/256)*16)
			local finA = floor((a1/256)*8)*32 + floor((a2/256)*8)*4 + 2
			finColor = tocolor( finR, finG, finB, finA )
		else
			local r,g,b,a = fromColor(color1)
			local finA = (floor((a/256)*64)*4)%256
			finColor = tocolor( r,g,b, finA )
		end
		shaderColCache[color1][color2] = finColor
	end

	local antialiasComp = 16777216
	if not antialias then antialiasComp = 0 end
	finColor = finColor + antialiasComp
	dxDrawImage( posX-radius, posY-radius, radius*2, radius*2, shader, nil, nil,  finColor )
end
addEventHandler("onClientRender",root,
	function()
	dxDrawCircleShader(500,200,60,tocolor(255,255,255),tocolor(255,255,255),1)
	end
)

 

nyxvlt536yqh.png

 

Expand  

الشادر اختلف عن الشادر الأول , الشادر هذا يحط دائره معبئة

Link to comment
  On 15/08/2019 at 23:13, NX_CI said:

ممكن تفهمني ايش التغيير اللي حصل في الكود هذا ^

الشادر اختلف عن الشادر الأول , الشادر هذا يحط دائره معبئة

Expand  

آدري بس الخطوط اتشالت بس حين كيف اخليه علي دائره بس :'(

قآيلك الخطوطط مو صافيه ب صوره قبل

والحين صافيه

يعني الخطوط واضح الحين مثل صوره HD

 

Edited by liwahadri
Link to comment
  On 15/08/2019 at 23:18, liwahadri said:

آدري بس الخطوط اتشالت بس حين كيف اخليه علي دائره بس :'(

قآيلك الخطوطط مو صافيه ب صوره قبل

والحين صافيه

يعني الخطوط واضح الحين مثل صوره HD

 

Expand  

أهااا فهمت عليك الحين 

يعني مشكلتك مع الدائره نفسها مو مع الكود

المشكله اني ما اعرف للشادر وهو الشي الوحيد اللي معرقلني في اللعبه

دور على كود شادر في المواقع وهذي كلمات دلاليه تساعدك في البحث

HLSL, Shaders DirectX9

أدري صعب تفهمها بس مافيه شرح في الويكي للأسف وقليل تحصل ناس تفهم في الشادر

  • Thanks 1
Link to comment
  On 15/08/2019 at 23:26, NX_CI said:

أهااا فهمت عليك الحين 

يعني مشكلتك مع الدائره نفسها مو مع الكود

المشكله اني ما اعرف للشادر وهو الشي الوحيد اللي معرقلني في اللعبه

دور على كود شادر في المواقع وهذي كلمات دلاليه تساعدك في البحث

HLSL, Shaders DirectX9

أدري صعب تفهمها بس مافيه شرح في الويكي للأسف وقليل تحصل ناس تفهم في الشادر

Expand  

عندي سؤال هل يمدني انسخ اكواد شيدر الثاني ب شيدر ذا وبتجي مشاكل؟

Link to comment
  On 15/08/2019 at 23:29, liwahadri said:

عندي سؤال هل يمدني انسخ اكواد شيدر الثاني ب شيدر ذا وبتجي مشاكل؟

Expand  

أكيد فيها مشاكل لأن طريقة كتابة الشادر في ام تي اي تختلف عن بقية الشادرز الثانيه

Scripting ما أدري صراحة , لكن أنصحك تحط موضوعك بالانجليزية في قسم

وتسأل عن الشادر كيف تخليه يشتغل على ام تي اي

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