الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة تغير لون الصور في الألعاب الثنائية

بدأه أبو فهيد في 29 يناير 2012 · 5 رد · 802 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته

أحاول أن أعمل لعبة بسيطة عبارة عن مدفع يدمر أي هدف بالسماء .

وهذا صورة المدفع و الحامل :

post-87554-022251100 1327847690_thumb.pn post-87554-007861500 1327847702_thumb.pn

المشكلة هي أني أريد تغير لون المدفع و الحامل , ولكن كيف ؟؟

وجد مثال يستخدم LookupOp يقوم بتغير اللون إلى الأحمر , مرفق مع الكود في دالة createColorizeOp() , ولكن لم تعجبني و لم أفهم طريقة عملها جيدا

تحميل كود اللعبة

Game.zip

المرفقات
cannon.pngcarriage.png

للصداقة البرمجية

pro-vb6@hotmail.com

#2

هل دائما ما تحتاج الى تغير لون المدفع داخل اللعبه ؟

اذا كانت الاجابه نعم فقوم بتصميم المدفع بالـ Graphics الخاصه بالجافا وبكدا تقدر تغير اللون ولون الاطار وخلافه ان شأت

لكن اذا كانت لا فقوم بتصميم المدفع باستخدام الفوتوشوب وادرج الصوره فالبرنامج افضل لك

بالتوفيق

Software Developer
Mahmoudkelany.com


 

#3

شكرا يا أستاذ محمد , و يعطيك العافية

الحمدلله بعد بحث طويل , وجد المطلوب وسوف أضعه هنا للفائدة

هذي هي الدالة التي تغير لون الصورة :

 public LookupOp createColorizeOp2(int R1, int G1, int B1) {
    short[] alpha = new short[256];
    short[] red = new short[256];
    short[] green = new short[256];
    short[] blue = new short[256];

       // BufferedImage bi = new BufferedImage(Width, Height, BufferedImage.TYPE_INT_ARGB);
      bi.setData(CarriageImage.getData());
    for (short i = 0; i < 256; i++) {
        alpha = i;
        red = (short) ((R1 + i*.3)/2);
        green = (short) ((G1 + i*.59)/2);
        blue = (short) ((B1 + i*.11)/2);
    }

    short[][] data = new short[][] {
            red, green, blue, alpha
    };

    LookupTable lookupTable = new ShortLookupTable(0, data);
    LookupOp lop = new LookupOp(lookupTable, null);
    lop.filter(bi, null);
    return lop;
}

ملاحظة مهم , هذي الدالة تقبل الصورة من نوع ARGB لذلك يجب تعريف BufferedImage يأخذ نوع ARGB

BufferedImage bi = new BufferedImage(Width, Height, BufferedImage.TYPE_INT_ARGB);

وهذه النتيجة :

post-87554-088260200 1328343491_thumb.pn

المرفقات
Screenshot at 2012-02-04 11:02:26.png

للصداقة البرمجية

pro-vb6@hotmail.com

#4

هل من الممكن ان تشرح الكود لانه غامض فاين الدالة المسرولة عن تغيير الالوان؟

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#5

في الحقيقة يا أخي العزيز أنا لم أفهم الكود بشكل كامل , ولكن على حسب فهمي المتواضع :

هذا الكود هو المسؤول عن تغير اللون :

LookupTable lookupTable = new ShortLookupTable(0, data);
    LookupOp lop = new LookupOp(lookupTable, null);
     lop.filter(SourceBI,resultBI);

الكلاس LookupOp يعطيك تحكم مباشر على لون البكسل للصورة , لذلك عند إنشاء كائن من الكلاس LookupOp أعطيناه جدول بإسم(lookupTable) , هذا الجدول عبارة عن مصفوفة يحتوي على قيم ألوان البكسلات

الأن لدينا جدول الألوان , لكي نضيف الألوان في الصورة نعمل :

 lop.filter(SourceBI,resultBI);

يحتوي على بارامترين من نوع BufferedImage : الأول وهو مصدر الصورة ( صورة قبل التعديل ) , و الثاني هو نتيجة الصورة الأولى بعد التعديل(أي بعد إضافة الألوان )

و بالتالي نستطيع إستخدام المتغير resultBI لرسمها على الشاشة مثلا :

g.drawImage(resultBI, null, 100, 100);
2

للصداقة البرمجية

pro-vb6@hotmail.com

#6

شكرا على المعلومة يا غالي وبالتوفيق

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…