الشبكة العربية لمطوري الألعاب

موهوب  ياسر أبوبكر مشاركة 11

بتاريخ 25/ربيع الأول/1429 12:25 م، قطب ياسر أبوبكر حاجبيه بشدة وهو يقول:

g.DrawString(dataGridViewtree.Rows[i].Cells[3].Value.ToString(),
newFont("Arial", 15), System.Drawing.Brushes.Blue, newPoint(55 + x, 55));

 أعتقد أن الخطأ هنا عند التصريح عن :
new point
 
حيث أن الرسم يتم داخل حلقة وعند تحريك الإطار (أي التدحرج فيه!) تتغير الإحداثيات ويتم لإنشاء نقاط جديدة في الإحداثيات الجديدة !
 
(أعتقد!!)

محترف مشرف عبد اللطيف حاجي علي مشاركة 12

وفي 01 نيسان 2008 06:25 م، أعرب ياسر أبوبكر عن رأيه بالموقف كالآتي:

المشكلة مازالت قائمة!
هذا يدلنا على أن المشكلة في خوارزمية الرسم وليست في الرسم بحد ذاته. وهو لعمري لاكتشاف عظيم☺
 

في 01 نيسان 2008 06:25 م، قال ياسر أبوبكر بهدوء وتؤدة:

هذا جزء من الكود ويتعلق بالرسم (وهو غير كامل)
لا أرى في هذا الجزء أي مشاكل سوى الاستخدام الكبير للأرقام السحرية (أو الثابتة) والتي غالباً ينتج عنها نصف المشاكل. كما لست متأكداً من أين تحسب القيمة x.
إذا كان بإمكانك: ضع الكود الذي تشك أن المشكلة فيه وإلا ضع كامل كود الرسم سواءً مباشرة أو بمرفق.

عبد اللطيف حاجي علي
مبرمج
In|Framez

موهوب  ياسر أبوبكر مشاركة 13

وفي 25/ربيع الأول/1429 12:42 م، قال عبد اللطيف حاجي علي متحمساً:

إذا كان بإمكانك: ضع الكود الذي تشك أن المشكلة فيه وإلا ضع كامل كود



ملاحظة: أتحفظ على الكثير من النقاط في هذا الكود خاصة أن بعضها (أو أغلبها) غير عملي  
ولكن الفكرة إيجاد حل لمشكلت الرسم هذه فقط!

محترف مشرف عبد اللطيف حاجي علي مشاركة 14

وفي 01 نيسان 2008 07:07 م، ظهر شبح ابتسامة على وجه ياسر أبوبكر وهو يقول:

ملاحظة: أتحفظ على الكثير من النقاط في هذا الكود خاصة أن بعضها (أو أغلبها) غير عملي  
ولكن الفكرة إيجاد حل لمشكلت الرسم هذه فقط!
حسناً سأحاول ألا أتشدق بآراء ونصائح مملة كعادتي.
من نظرة سريعى على الكود تبين لي أنك تستخدم المصفوفات xpos1, ypos1, xpos2, ypos2, xpos3, ypos3 وتعدلها داخل كود الرسم.
لذلك أعتقد أن الحل ببساطة سيكون بحذف جميع عناصر هذه المصفوفات عند الدخول في كود الرسم باستخدام الإجراء Clear على كل مصفوفة.
 
طبعاً هناك مشاكل أخرى كوجود الأرقام السحرية و تكرار كبير لأجزاء من الكود مع... تباً يبدو أنني لم أستطع منع نفسي☺

عبد اللطيف حاجي علي
مبرمج
In|Framez

موهوب  ياسر أبوبكر مشاركة 15

تم إيجاد الحل للمشكلة !


وفي 02 ابريل 2008 01:04 ص، قال عبد اللطيف حاجي علي متحمساً:

من نظرة سريعى على الكود تبين لي أنك تستخدم المصفوفات xpos1, ypos1, xpos2, ypos2, xpos3, ypos3
 
 
نعم (الحقيقة لست أنا من كتب هذا الكود الرهيب☺ )
 المهم
 



وفي 02 ابريل 2008 01:04 ص، ظهر شبح ابتسامة على وجه عبد اللطيف حاجي علي وهو يقول:

حسناً سأحاول ألا أتشدق بآراء ونصائح مملة كعادتي.

لايهمك ... أنا أيضا أعاني من نفس هذه المشكلة☺ 
وقدتحدثت عن مع من كتب هذا الكود ...كان جدال أقرب منه إلى  الحديث ! 
 
المهم تحدتني هذه المشكلة بغض النظر عن باقي البرنامج ! ... وتم علاجها .. وكانت بسبب تعريف المصفوفات كمتحولات عامة وإستخدامها في الرسم بشكل خاص ... الحقيقة لست خبيرا بالشرح ولكن سأرفق الكود المعدل
 
وأريد سماع رأي مبرمج خبير في ذلك (أي في سبب المشكلة)
 
 
تحياتي

محترف مشرف عبد اللطيف حاجي علي مشاركة 16

وفي 02 نيسان 2008 05:05 م، ظهر شبح ابتسامة على وجه ياسر أبوبكر وهو يقول:

وأريد سماع رأي مبرمج خبير في ذلك (أي في سبب المشكلة)
مممم... حسناً.... يبدو أنني في موقف لا أحسد عليه :s
 
المهم، السبب كما قلت لك في ردي هو أن هذه المصفوفات الست يتم تعديلها داخل كود الرسم (حسب ما أذكر يتم إدخال نقاط الرسم فيها). المشكلة أنه عند كل رسم (كمثال على ذلك عند كل تحريك للـ Scroll أو تصغير وتكبير للنافذة) يضاف نقاط جديدة لهذه المصفوفات ثم ترسم الخطوط من جديد (الخطوط بين النقاط القديمة مع الخطوط بين النقاط الجديدة). لاحظ أن إعادة الرسم دون تحريك الـ scroll سيضيف نقاطاً جديدة أيضاً لكنها ستكون مساوية للقديمة لذلك سترسم الخطوط القديمة فوق الجديدة ولن تتشوه الصورة. أما في حال تحريك الـ scroll فستتغير النقاط وستظهر الخطوط الإضافية وبالتالي ستتشوه الصورة.
الحل كما ذكرتُ يكون إما بحذف العناصر القديمة عند الدخول في إجراء الرسم (أو في آخره) أو كما ذكرتَ بجعل هذه المصفوفات Local بدلاً من member variables في الـ class
بكلا الحالتين النتيجة واحدة: مصفوفات نظيفة في البداية دون أي نقاط سابقة.
 
أرجو أن هذا الرأي "خبير" كفاية☺

عبد اللطيف حاجي علي
مبرمج
In|Framez

موهوب  ياسر أبوبكر مشاركة 17

فهمت من كلامك التالي :
 
عملية الرسم تتم عند البداية ومن ثم تليها عمليات رسم أخرى للمحافظة على الشكل عند حصول حدث معين مثل :


وفي 02 ابريل 2008 06:33 م، ظهر شبح ابتسامة على وجه عبد اللطيف حاجي علي وهو يقول:

(كمثال على ذلك عند كل تحريك للـ Scroll أو تصغير وتكبير للنافذة)

فيقوم البرنامج بالعودة إلى class الرسم الموجود في البرنامح لأخذ النقاط الموجودة سابقا لإعادة رسمها ...وهو بالأصل يعود له بشكل مستمر كما ذكرت ولكن في حال لم يتحرك الشكل فإن النقاط الجديدة تكون مساوية للقديمة فترسم فوقها ولا نلاحظ أي مشكلة... 
ولكن في حال حدوث حركة ما فإنه (وكما هو موجود في البرنامج) سيتم رسم النقاط القديمة ولكن بالإطافة إلى ذلك سيتم تعريف مصفوفات جديدة تحمل قيم جديدة أيضا وسيتم رسمها بكل إخلص وأمانة ... وفي كل مرة يتم التحريك سيبذل البرنامج جهده لإرضاء المستخدم☺
 
وهنا مربط الفرس
 
... هل فهمت كلامك بشكل صحيح؟



أما في 02 ابريل 2008 06:33 م، فقد تنهد عبد اللطيف حاجي علي بارتياح وهو يرد:

أرجو أن هذا الرأي "خبير" كفاية☺

طبعا وهذا شيء لاغبار عليه 
وشكرا جزيلا لك

محترف مشرف عبد اللطيف حاجي علي مشاركة 18

أما في 13 نيسان 2008 01:27 م، فقد تنهد ياسر أبوبكر بارتياح وهو يرد:

ولكن في حال حدوث حركة ما فإنه (وكما هو موجود في البرنامج) سيتم رسم النقاط القديمة ولكن بالإطافة إلى ذلك سيتم تعريف مصفوفات جديدة تحمل قيم جديدة أيضا وسيتم رسمها بكل إخلص وأمانة ... وفي كل مرة يتم التحريك سيبذل البرنامج جهده لإرضاء المستخدم☺
 
وهنا مربط الفرس
 
... هل فهمت كلامك بشكل صحيح؟
بالضبط... إلا أنه لا يتم "تعريف مصفوفات جديدة" وإنما يتم إضافة نقط جديدة للمصفوفات القديمة التي تحوي نقاطاً قديمة

عبد اللطيف حاجي علي
مبرمج
In|Framez