سؤال

لديّ مخزن مؤقت شفاف تم إنشاؤه مع الكود التالي (وليس ذا صلة بكيفية إنشاؤه ، على ما أعتقد):

            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            GraphicsDevice gs = ge.getDefaultScreenDevice();
            GraphicsConfiguration gc = gs.getDefaultConfiguration();

            Rectangle screen = transformationContext.getScreen();

            // Create an image that supports transparent pixels
            return gc.createCompatibleImage((int) screen.getWidth(), (int) screen.getHeight(),
                    Transparency.BITMASK);

كيف يمكنني مسح الصورة (الصورة الفارغة في نفس الحالة التي تم إنشاؤها) بأسرع طريقة ممكنة دون إعادة إنشاء الصورة؟ إن إعادة إنشاء الصورة يضع عبئًا على GC ، ويتوقف مؤقتًا عن VM وتجميد واجهة المستخدم.

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

المحلول

حصلت عليه :) تستخدم واضحة بدلا من ملء بلون شفاف.

            graphics = (Graphics2D) offlineBuffer.getGraphics();
            graphics.setBackground(new Color(255, 255, 255, 0));
            Rectangle screen = transformationContext.getScreen();
            graphics.clearRect(0,0, (int)screen.getWidth(), (int)screen.getHeight());

نصائح أخرى

إحدى الطرق السريعة نسبيًا ، لكنني لا أعرف ما إذا كانت الأسرع (وأرغب في رؤية إجابات أخرى) هي أن يكون لديك صورة أخرى لا تعدلها أبدًا ، وهي دائمًا "تم مسحها بالكامل" / "شفافة تمامًا" وبعد ذلك يمكنك القيام بنسخة نقطية ، قل أنك سميت تلك النسخة Clear:

imageYouWantToClear.setData( CLEAR.getRaster() );

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

أعتقد أن أفضل مكان للعثور على infos حول موضوع العزف على الأداء سيكون في برنامج Java Game-Programmers و Java Game-Api-Programmers Community/Forums.

راجع للشغل تأكد من أن كلا من العزف يستخدم وضع "متوافق": type_int_argb قد يكون على ما يرام على Windows ولكن ليس على OS X ، وما إلى ذلك. لذلك تريد إنشاء شيء مثل:

GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);

لا يؤلمني قانون قائم الإذاعة ، شكرًا جافا ؛)

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