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
42 minutes ago, HassoN said:

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

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

 

Link to comment
1 hour ago, liwahadri said:

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

 

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

startAngle + stopAngle 

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

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

 

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

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

Link to comment
6 minutes ago, HassoN said:

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

startAngle + stopAngle 

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

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

 

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

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

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

m3h0zhj0fsas.png

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

50py00vrg6di.png

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

Edited by liwahadri
Link to comment
8 minutes ago, 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)

 

قصدي مثل nos او health

تتحرك كامل :]

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

Edited by liwahadri
Link to comment
27 minutes ago, HassoN said:

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

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
4 minutes ago, HassoN said:

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

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

startAngle, stopAngle

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

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

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

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
3 hours ago, #\_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)

قصدك كدا ؟

شوف هنا كيف

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
14 minutes ago, 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

 

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

Link to comment
6 minutes ago, NX_CI 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

 

Edited by liwahadri
Link to comment

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

7 minutes ago, 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

 

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

Link to comment
5 minutes ago, NX_CI said:

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

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

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

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

والحين صافيه

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

 

Edited by liwahadri
Link to comment
4 minutes ago, liwahadri said:

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

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

والحين صافيه

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

 

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

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

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

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

HLSL, Shaders DirectX9

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

  • Thanks 1
Link to comment
3 minutes ago, NX_CI said:

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

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

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

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

HLSL, Shaders DirectX9

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

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

Link to comment
Just now, liwahadri said:

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

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

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