السبت، 31 يوليو 2010

مقدمة في انشاء واجهة مستخدم منخفضة المستوى - الجزء الثالث

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

كيفيه انشاء خط لاستخدامه في الرسم
Font f = Font.getFont(int face, int style, int size);
أنواع الخطوط
  • FACE_SYSTEM
  • FACE_MONOSPACE
  • FACE_PROPORTIONAL
 تنسيق الخطوط
  • STYLE_PLAIN
  • STYLE_BOLD
  • STYLE_ITALIC
  • STYLE_UNDERLINED
حجم الخط
  • SIZE_SMALL
  • SIZE_MEDIUM
  • SIZE_LARGE
الصور
يتم رسم الصور عن طريق ال drawImage method الموجوده في الفئه Graphics.
public void drawImage(Image img,
                      int x,
                      int y,
                      int anchor)
محاذاه الصوره يشبه الى حد كبير محاذاه النصوص التي تم شرحها سابقا.

مجال الرسم
يمكن تحديد مجال للرسم بحيث أن لأي شيء خارج هذا المجال فانه لن يرسم باستخدام ال setClip method الموجوده في الفئه Graphics.
public void setClip(int x,
                    int y,
                    int width,
                    int height)
استقبال الأحادث في ال Canvas
عند الضغط على أزرار الهاتف فان مجموعه من ال methods سوف يتم تنفيذها لكي تعلمك بحدوث الحدث كما سترسل لك بعض المعلومات عن الزر الذي تم الضغط عليه.
protected void keyPressed(int keyCode)
protected void keyReleased(int keyCode)
Protected void keyRepeated(int keyCode)

Game Actions
يمكن معرفه ال Game Action المقابل لكل keycode تم استقباله في أحد ال methods السابقه عن طريق
int gameAction = getGameAction(keyCode);
أنواع ال Game Actions التي تدعمها JME هي كالتالي:
  • UP
  • DOWN
  • LEFT
  • RIGHT
  • FIRE
  • GAME_A
  • GAME_B
  • GAME_C
  • GAME_D
ال Game Actions يمكن أت ترتبط بأزرار مختلفه حسب نوع الجهاز وهي بذلك تريح المبرمج من عناء اختلاف الأجهزه فمثلا زر ال Fire في هواتف Nokia عاده هو الزر الموجود في منتصف لوحه التحرك أو الزر الذي يحمل الرقم 5 وبالتالي فانت عندما تقوم بعمل لعبه ما فان المستخدم سيستخدم نفس الأزرار التي تعود على استخدامها وبنفس الطريقه.

مثال
public class KeyCanvas extends Canvas {

    private Font mFont;
    private String mMessage = "[Press keys]";


    public KeyCanvas() {
        mFont = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
    }


    public void paint(Graphics g) {
        int w = getWidth();
        int h = getHeight();

        g.setColor(0xFFFFFF);
        g.fillRect(0, 0, w - 1, h - 1);
        g.setColor(0x0);
        g.drawRect(0, 0, w - 1, h - 1);
        g.setFont(mFont);
        int x = w / 2;
        int y = h / 2;
        g.drawString(mMessage, x, y, Graphics.BASELINE | Graphics.HCENTER);
    }

    protected void keyPressed(int keyCode) {
        int gameAction = getGameAction(keyCode);

        switch (gameAction) {
            case UP:
                mMessage = "UP";
                break;

            case DOWN:
                mMessage = "DOWN";
                break;

            case LEFT:
                mMessage = "LEFT";
                break;

            case RIGHT:
                mMessage = "RIGHT";
                break;
            case FIRE:
                mMessage = "FIRE";
                break;
            case GAME_A:
                mMessage = "GAME_A";
                break;
            case GAME_B:
                mMessage = "GAME_B";
                break;
            case GAME_C:
                mMessage = "GAME_C";
                break;
            case GAME_D:
                mMessage = "GAME_D";
                break;
            default:
                mMessage = "";
                break;
        }
        repaint();
    }
}
في المثال السابق أعدنا تعريف keyPressed method وفي داخلها قمنا بمعرفه ال Game Action الذي حصل باستخدام جملة switch ثم أدخلنا اسم هذا ال Game Action في متغير اسمه mMessage وفي أخر سطر من ال method استدعينا repaint لكي تقوم باعاده رسم الشاشه.


في ال paint method نقوم برسم المتغير mMessage في منتصف الشاشه. لاحظ أن هذه الفئه ترث من الفئه Canvas وبالتالي نستطيع وضعها على شاشه الهاتف وهو ما سنقوم به في السطور الأتيه:
public class KeyEvents extends MIDlet {
    public void startApp() {
        KeyCanvas canvas = new KeyCanvas();
        Display.getDisplay(this).setCurrent( canvas );
        
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}

ليست هناك تعليقات:

إرسال تعليق