سؤال

وأنا نوع من جديد إلى c ++ وأنا أحاول لخلق لعبة. لدي RECT_GRID مجموعة 2D من المستطيلات. لدي GRID مجموعة 2D قصيرة غير موقعة. I ملء مجموعة المستطيل خلال WM_CREATE

وهذا الحدث WM_PAINT يرسم المستطيلات لجميع العناصر في المصفوفة. ويستند لون المستطيل على قيمة GRID [س] [ص]

ولقد أوضحت ذلك عند الضغط على مفتاح لأسفل، وتغيير لون واحد من المستطيلات من خلال وضع GRID [1] [XMOVE] = إلى لون مختلف ثم ينقض المستطيل العميل

وأساسا ما يحدث هو، وأنها تعمل بشكل جيد لفترة من الوقت، ولكن في نهاية المطاف يتوقف فقط رسم الاشياء. راجعت بلدي متغير XMOVE أثناء التصحيح، راجعت بالقيم شبكة والاشياء وكل شيء على ما يرام. عندما إزالة لحلقة من الحدث الطلاء والتركيز على 1 المستطيل المحدد، فإنه لا يفشل أبدا، ولكن إذا كنت في محاولة لإعادة رسم كل منهم في وقت واحد، وبعد حوالي 20 مرة، فإنه يتوقف عن أشياء اللوحة. ما الذي يمكن أن يسبب هذا؟ أنا جديدة إلى c ++ وأراهن أنا لا الرسم بشكل صحيح ويسبب تجاوز أو شيء من هذا.

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

وتحرير:

وأنا باستخدام 3 فرش العالمية HBRUSH A؛ HBRUSH B. HBRUSH C؛

وعندما تعديلها، وأنا دائما أقول A = MakeBrush (NUM)؛

وعامي I باستخدام فرش صحيح؟

هل كانت مفيدة؟

المحلول

وقائي الاول تخمين، إذا كنت من إجمالي GDI / C ++ مبتدئ، هو أنك ربما خلق الكثير من الأقلام والفرش. مقيدة هذه الموارد في ويندوز. يمكنك فقط إنشاء الكثير منهم قبل البدء في فرض الضرائب على الموارد الخاصة بك. ذلك إما جعل فرش وأقلام ويندوز وغيرها كلها دفعة واحدة وإعادة استخدامها، أو التخلص منها بشكل صحيح عند الانتهاء من ذلك. أوصي الحصول على نسخة من "الكتاب المقدس" ( http://www.amazon.com / برمجة ويندوز٪ C2٪ AE-الخامس-مايكروسوفت / موانئ دبي / 157231995X / المرجع = sr_1_1؟ أي = UTF8 & ق = الكتب والبطاقة الشخصية = 1252788457 & ريال = 8-1 ) وقراءة فصول هناك حول رسم.

تعديل : لانه لا يبدو وكأنك تعديل فرش بشكل صحيح، ولكن منذ أن كنت لا تستطيع رؤية رمز لMakeBrush، وأنا لا أعرف. ربما كنت خلق الكثير من الفرش وراء الكواليس وحتى أنك لا تعرف ذلك. على محمل الجد، والحصول على نسخة من كتاب بيتزولد وقضاء ساعة أو ساعتين. سوف ينتهي بك الأمر مع أكثر من الشعر على رأسك في وقت لاحق! ؛ -)

نصائح أخرى

وستلاحظ في جميع الأمثلة GDI، وهو 'CreatePen' أو 'CreateSolidBrush' سيتبعه كائن الحذف. هذا هو لأنها موارد محدودة في ويندوز، ويمكنك تشغيل للخروج منها إذا لم يكن لحذفها عند الانتهاء.

PAINTSTRUCT Ps;
HDC hDC = BeginPaint(hWnd, &Ps);
HBRUSH NewBrush = CreateSolidBrush(RGB(250, 25, 5));

SelectObject(hDC, NewBrush);
Rectangle(hDC, 20, 20, 250, 125);
DeleteObject(NewBrush);
EndPaint(hWnd, &Ps);

إذا كنت قد نسيت لتشمل الدعوة "DeleteObject"، ثم سيكون لديك مشاكل بعد استخدام كافة فرش المتاحة. انها فعلا متعة في محاولة =)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top