بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله تعالى وبركاته
لأن أظن أغلب الناس ماتعرفه وتحسبه معقد interpolateBetween جاي أشرح لكم فنكشن
تابعو معي يمكن الشرح يكون طويل لكن اتمنى تستفيدو
تعني الإقتحام مابين أو التأثير بين
بكل بساطة كل ماعليك معرفته هو مثل من - الى
الفنكشن يسمح لك تسوي أنيمايشن (حركة) بين 6 نقاط حيث تتمثل الثلاث الأولى من إحداثيات البداية والثلاث الثانية النهاية
سواءا كان : لوحة - صورة - تصاميم دي إكس - ماركر - كاميرا .. أي شي له إحداثيات
# الجملة التركيبية للوظيفة
float float float interpolateBetween ( float x1, float y1, float z1, float x2, float y2, float z2, float fProgress, string strEasingType)
: العناصر المطلوبة
x1, y2, z2 : (..إحداثيات بداية التأثير ( الحركة
x2, y2, z2 : إحداثيات نهاية التأثير
fProgress : مدة الإحراز أو التقدم التي يأخذها التأثير ( الوقت ) ويكون نوعا ما ب ميلي ثانية
strEasingType : نوع الحركة أو التأثير اللذي تريده
الأمثلة رح توضح أكثر أعرف انكم مافهمتو بعد
حتى نجيب قيمة ب ميلي سكند أو ميلي ثانية نستخدم
getTickCount
fProgress الوظيفة تقوم بجلب مدة الوقت اللي جهازك كان شغال فيه بالميلي سكند وببعض حسابات نكون
اللي نحطه بالنهاية moveObject أنواع الحركة ... تماما مثل
من الويكي
https://wiki.multitheftauto.com/wiki/Easing
الموقع فيه جدول يوضح لك كل أنواع الحركة وكيف تأثيرها
مثال لهذا
"Linear"
: كيفية تأثيرها
يعني بشكل مستقيم دون تأثيرات ثانية
بالمثال يتضح المقال
# الأمثلة #
مثال 1
المثال يوريني كيف نخلي لوحة تجي من فوق الى الوسط
sx, sy = guiGetScreenSize()
test = guiCreateWindow((sx - 454) / 2, (sy - 502) / 2, 454, 502, "test", false) -- لوحة
function pop()
local rh = interpolateBetween( (sy - 2) / 2,0,0, (sy - 502) / 2,0,0, (getTickCount()-start)/1800, "OutElastic") -- نعرف قيمة واحدة لأننا نريد الإرتفاع فقط
guiSetPosition(test,(sx - 454) / 2,rh, false) -- نخلي موضع اللوحة على حسب اللي نبيه
end
bindKey("F2", "down",
function ()
guiSetVisible(test,true)
addEventHandler("onClientRender",root,pop) -- الفنشكن يستخدم مع الرندر
start = getTickCount() -- نعيد تعريف وقتنا حتى يتعرف عليه عند الضغط على الزر
end)
getTickCount()-start/1800
نعيد نجيب الوقت ننقصه من وقت البداية اللي هو عند الضغط على الزر نقسمه على وقت النهاية
اللوحة رح تجي لمدة ثانية و 800 ميلي سكند وليس بعد
على الأرجح رح يطلعنا
start a nil value
لذا نقترح نعرفه مرتين
"OutElastic"
بهذا الشكل ض2
نقدر نستعمل واحدة او اثنين او ثلاث شرط مايكونو فوق ثلاث
لأننا مانحتاجهم نحطهم صفر
مثال 2
cam نوضح كيف نسوي كاميرا تتحرك من موضع لاخر عند كتابة الكومند
start = getTickCount()
addCommandHandler("cam",
function()
start = getTickCount()
addEventHandler("onClientRender",root,moveCam)
end)
function moveCam()
x1, y1, z1 = interpolateBetween(500,600,452,800,454,411,(getTickCount()-start)/4000, "Linear")
x2, y2, z2 = interpolateBetween(510,620,512,850,464,471,(getTickCount()-start)/4000, "Linear")
setCameraMatrix(x1, y1, z1, x2, y2, z2)
end
الإحداثيات غير مجربة قاعد أخبص فقط لتوضيع المعنى
مثال 3
نوري كيف نلون ليبل (كتابة) عند دخول تأشيرة الماوس إليه
start = getTickCount()
test = guiCreateWindow(454,503, 454, 502, "test", false)
label = guiCreateLabel(100, 0, 252, 20, "testing", false, test)
guiLabelSetColor(label, 255, 0, 0,255) -- نحط مثلا لون أحمر
function colorTheLabel()
color1, color2, color3 = interpolateBetween(255,0,0,0,255,0, (getTickCount()-start)/2000, "Linear") -- نحوله من أحمر الى أخضر لمدة ثانيتين
end
function RestColor()
color4, color5, color6 = interpolateBetween(0,255,0,255,0,0, (getTickCount()-start)/2000, "Linear") -- نحوله من أحمر الى أخضر لمدة ثانيتين
end
addEventHandler("onClientMouseEnter",label,
function()
start = getTickCount()
removeEventHandler("onClientRender",root,RestColor)
addEventHandler("onClientRender",root,colorTheLabel)
guiLabelSetColor(label, color1, color2, color3,255)
end
)
addEventHandler("onClientMouseLeave",label,
function()
start = getTickCount()
removeEventHandler("onClientRender",root,colorTheLabel)
addEventHandler("onClientRender",root,RestColor)
guiLabelSetColor(label, color4, color5, color6,255)
end
)
الكتابة رح تتلون من احمر الى أخضر عند دخول الماوس اليه و يتحول من اخضر الى أحمر عند الخروج
صفحة الويكي
https://wiki.multitheftauto.com/wiki/InterpolateBetween
هذا كل شي لقد تعبت
أتمنى الشرح يكون واضح أي شي غير مفهوم أو غلط يرجى التعليق لأن بعض الأكواد غير مجربة اللعبة ماسحها
الموضوع سيتم إعادة تنسيقه حين رجوع جهازي إلي
السلام خير الختام