هل من الممكن أداء التقديم النشط في جافا سوينغ دون أن يكون على EDT؟
-
21-09-2019 - |
سؤال
أنا أبحث في استخدام استراتيجية العازلة والتقنية التالية الموصوفة على جافادوك:
// Main loop
while (!done) {
// Prepare for rendering the next frame
// ...
// Render single frame
do {
// The following loop ensures that the contents of the drawing buffer
// are consistent in case the underlying surface was recreated
do {
// Get a new graphics context every time through the loop
// to make sure the strategy is validated
Graphics graphics = strategy.getDrawGraphics();
// Render to graphics
// ...
// Dispose the graphics
graphics.dispose();
// Repeat the rendering if the drawing buffer contents
// were restored
} while (strategy.contentsRestored());
// Display the buffer
strategy.show();
// Repeat the rendering if the drawing buffer was lost
} while (strategy.contentsLost());
}
سيكون من الرائع تجنب بتوقيت شرق الولايات المتحدة و invokeLater
أو invokeAndWait
عند أداء الرسوم المتحركة.
أسئلتي:
- إذا كان هذا في تطبيق التأرجح ، فلا نحتاج إلى القلق بشأن وضع المكالمة
show
على EDT؟ - هل يمكن لأي شخص آخر رؤية أي مشاكل باستخدام هذا في تطبيق التأرجح؟
كان هذا مستوحى من هذا إجابة مثيرة للاهتمام لبرمجة اللعبة.
المحلول
بشكل عام ، لا. الطلاء على موضوع آخر غير موضوع إرسال الحدث (EDT) النتائج في القطع الأثرية غير المرغوب فيها ، على الرغم من أن النتائج قد تكون مقبولة. هذه مثال يوضح بعض المقايضات. أفضل الترتيب للاستخلاص على EDT باستخدام javax.swing.timer, ، لكن نهج أخرى من الممكن. أيضا ، من المستوى الأعلى الذي اخترته حاوية قد تنفذ بالفعل استراتيجية العازلة.
نصائح أخرى
كما ذكرت Trashdog ، ليس من الجيد القيام بذلك. قم بإنشاء مؤشر ترابط الرسوم المتحركة الخاصة التي سترسم صورة خارج الشاشة. ثم ادفعه إلى بعض الحامل. إذا تم تسمية PaintComponent بإحضار الصورة الحالية ورسمها على المكون. منتهي. انظر إلى نمط Rendezvous.