الفرق بين المراجعتين لصفحة: «Godot/best practices/node alternatives»
Naser-dakhel (نقاش | مساهمات) أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:أين وكيف تتفادى استخدام العقد لكل شيء في جودو}}</noinclude> العقد سهلة الإنشاء، ولكن...' |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق |
||
سطر 4: | سطر 4: | ||
توفر جودو كائنات أخف لإنشاء واجهات برمجة تطبيقات التي تستخدم العقد، أبقي ذلك في عين الاعتبار كخيار عند تصميم كيفية بناء خاصيات مشروعك. | توفر جودو كائنات أخف لإنشاء واجهات برمجة تطبيقات التي تستخدم العقد، أبقي ذلك في عين الاعتبار كخيار عند تصميم كيفية بناء خاصيات مشروعك. | ||
== الكائن Object == | |||
أبسط كائن خفيف يجب أن يستخدم الكائن الأصلي إدارة الذاكرة اليدوي، ومع ذلك ليس من الصعب إنشاء هيكلية بيانات خاصة حتى هيكلية العقد، وهي أخف من صنف العقدة <code>Node</code>. | |||
* '''مثال''': لاحظ عقدة | *'''مثال''': لاحظ عقدة الشجرة <code>Tree</code>، تدعم مستوى عالي من التعديل لجدول المحتوى مع عدد عشوائي من الصفوف والأعمدة. البيانات المستخدمة لإنشاء التصوير هي حقيقةً كائنات <code>TreeItem</code>. | ||
* '''ميزات''': تبسيط واجهات برمجة التطبيقات إلى كائنات ذات نطاق أصغر تساعد في تحسين الوصول ووقت التكرار. بدلًا من العمل مع مكتبة العقدة كاملة، يمكن اختصار مجموعة الكائنات يستطيع منها إنشاء وإدارة العقد الفرعية المناسبة | *'''ميزات''': تبسيط واجهات برمجة التطبيقات إلى كائنات ذات نطاق أصغر تساعد في تحسين الوصول ووقت التكرار. بدلًا من العمل مع مكتبة العقدة كاملة، يمكن اختصار مجموعة الكائنات يستطيع منها إنشاء وإدارة العقد الفرعية المناسبة. | ||
<blockquote>'''ملاحظة''': يجب الانتباه عند التعامل معهم، إذ يمكن تخزين الكائن في متغير ولكن هذه المراجع يمكن أن تصبح غير صالحة بدون سابق إنذار. مثلًا إذا قرر من أنشئ الكائن حذفه، هذا سيعطي حالة خطأ إذا قرر أحدهم الوصول إليه لاحقًا.</blockquote> | <blockquote>'''ملاحظة''': يجب الانتباه عند التعامل معهم، إذ يمكن تخزين الكائن في متغير ولكن هذه المراجع يمكن أن تصبح غير صالحة بدون سابق إنذار. مثلًا إذا قرر من أنشئ الكائن حذفه، هذا سيعطي حالة خطأ إذا قرر أحدهم الوصول إليه لاحقًا.</blockquote> | ||
== الكائن RefCounted == | |||
أعقد قليلًا من الكائن <code>Object</code>. تتبع المراجع references لنفسها وتحذف الذاكرة فقط عندما لا يبقى أي مرجع لنفسه. إن هذه مفيدة في معظم الحالات عندما نحتاج لبيانات في صنف مخصص. | |||
*'''مثال''': لاحظ كائن <code>FileAccess</code> إنه يعمل مثل كائن <code>Object</code> عادي عدا أنه ليس هناك حاجة لحذفه | |||
*'''ميزات''': نفس ميزات الكائن <code>Object</code> | |||
* '''مثال''': البرامج النصية، PackedScene (من أجل ملفات المشهد) والأنواع الأخرى مثل كل صنف AudioEffects. يمكن حفظ وتحميل كل هذه، أي هي | == المورد Resource == | ||
* '''الميزات''': [[Godot/scripting/resources|تحدثنا عن ميزات الموارد]] وعن طرق تخزين البيانات التقليدية، ولكن في سياق استخدام الموارد بدلًا من | وهو معقد أكثر من الكائن <code>RefCounted</code> لديه الخاصية الداخلية لسلسلة serialize/ إزالة سلسلة deserialize (مثل حفظ وتحميل) خصائص الكائن الخاص بهم من/إلى ملفات جودو المصدرية. | ||
*'''مثال''': البرامج النصية، PackedScene (من أجل ملفات المشهد) والأنواع الأخرى مثل كل صنف <code>AudioEffects</code>. يمكن حفظ وتحميل كل هذه، أي هي تُشتق من المورد <code>Resource</code>. | |||
*'''الميزات''': [[Godot/scripting/resources|تحدثنا عن ميزات الموارد <code>Resource</code>]] وعن طرق تخزين البيانات التقليدية، ولكن في سياق استخدام الموارد <code>Resource</code> بدلًا من العقد <code>Node</code>، هذه تتميز بتوافق مع الفاحص Inspector. وهي بنفس خفة الكائنات <code>Obejct</code> و <code>RefCounted</code> يمكنها أيضًا إظهار وتصدير الخاصيات في الفاحص. هذا يسمح لهم لشغل دور مثل العقد الفرعية عن استعمالية الواجهة، ولكن أيضًا تحسن الأداء إذا كان الهدف أن يكون هناك أكبر عدد ممكن من الموارد <code>Resource</code>/العقد <code>Node</code> في المشهد. | |||
== مصادر == | == مصادر == | ||
* [https://docs.godotengine.org/en/stable/tutorials/best_practices/introduction_best_practices.html صفحة Best Practices في توثيق جودو الرسمي.] | * [https://docs.godotengine.org/en/stable/tutorials/best_practices/introduction_best_practices.html صفحة Best Practices في توثيق جودو الرسمي.] | ||
[[تصنيف:Godot|{{SUBPAGENAME}}]] | [[تصنيف:Godot|{{SUBPAGENAME}}]] | ||
[[تصنيف:Godot Best Practices|{{SUBPAGENAME}}]] | [[تصنيف:Godot Best Practices|{{SUBPAGENAME}}]] |
المراجعة الحالية بتاريخ 07:36، 28 أكتوبر 2023
العقد سهلة الإنشاء، ولكن لديها محدودياتها، فيمكن أن يحتوي المشروع عشرات آلاف العقد العاملة، ولكن كلما زاد تعقيدها كلما زاد الضغط على أداء المشروع.
توفر جودو كائنات أخف لإنشاء واجهات برمجة تطبيقات التي تستخدم العقد، أبقي ذلك في عين الاعتبار كخيار عند تصميم كيفية بناء خاصيات مشروعك.
الكائن Object
أبسط كائن خفيف يجب أن يستخدم الكائن الأصلي إدارة الذاكرة اليدوي، ومع ذلك ليس من الصعب إنشاء هيكلية بيانات خاصة حتى هيكلية العقد، وهي أخف من صنف العقدة Node
.
- مثال: لاحظ عقدة الشجرة
Tree
، تدعم مستوى عالي من التعديل لجدول المحتوى مع عدد عشوائي من الصفوف والأعمدة. البيانات المستخدمة لإنشاء التصوير هي حقيقةً كائناتTreeItem
. - ميزات: تبسيط واجهات برمجة التطبيقات إلى كائنات ذات نطاق أصغر تساعد في تحسين الوصول ووقت التكرار. بدلًا من العمل مع مكتبة العقدة كاملة، يمكن اختصار مجموعة الكائنات يستطيع منها إنشاء وإدارة العقد الفرعية المناسبة.
ملاحظة: يجب الانتباه عند التعامل معهم، إذ يمكن تخزين الكائن في متغير ولكن هذه المراجع يمكن أن تصبح غير صالحة بدون سابق إنذار. مثلًا إذا قرر من أنشئ الكائن حذفه، هذا سيعطي حالة خطأ إذا قرر أحدهم الوصول إليه لاحقًا.
الكائن RefCounted
أعقد قليلًا من الكائن Object
. تتبع المراجع references لنفسها وتحذف الذاكرة فقط عندما لا يبقى أي مرجع لنفسه. إن هذه مفيدة في معظم الحالات عندما نحتاج لبيانات في صنف مخصص.
- مثال: لاحظ كائن
FileAccess
إنه يعمل مثل كائنObject
عادي عدا أنه ليس هناك حاجة لحذفه - ميزات: نفس ميزات الكائن
Object
المورد Resource
وهو معقد أكثر من الكائن RefCounted
لديه الخاصية الداخلية لسلسلة serialize/ إزالة سلسلة deserialize (مثل حفظ وتحميل) خصائص الكائن الخاص بهم من/إلى ملفات جودو المصدرية.
- مثال: البرامج النصية، PackedScene (من أجل ملفات المشهد) والأنواع الأخرى مثل كل صنف
AudioEffects
. يمكن حفظ وتحميل كل هذه، أي هي تُشتق من الموردResource
. - الميزات: تحدثنا عن ميزات الموارد
Resource
وعن طرق تخزين البيانات التقليدية، ولكن في سياق استخدام المواردResource
بدلًا من العقدNode
، هذه تتميز بتوافق مع الفاحص Inspector. وهي بنفس خفة الكائناتObejct
وRefCounted
يمكنها أيضًا إظهار وتصدير الخاصيات في الفاحص. هذا يسمح لهم لشغل دور مثل العقد الفرعية عن استعمالية الواجهة، ولكن أيضًا تحسن الأداء إذا كان الهدف أن يكون هناك أكبر عدد ممكن من المواردResource
/العقدNode
في المشهد.