CodeGym /مدونة جافا /Random-AR /قسم الألعاب في CodeGym: التعامل مع الأحداث
John Squirrels
مستوى
San Francisco

قسم الألعاب في CodeGym: التعامل مع الأحداث

نشرت في المجموعة
"الألعاب" من CodeGym عبارة عن قسم جديد يحتوي على مهام كبيرة مثيرة للاهتمام حيث يمكنك إنشاء إصداراتك الخاصة من الألعاب الشائعة. الأمر بسيط: كل مشروع لعبة مقسم إلى مهام فرعية. أكملهم واحدًا تلو الآخر وتنتهي اللعبة. يمكنك مشاركتها على الشبكات الاجتماعية ودعوة أصدقائك للعب. قسم "الألعاب" في CodeGym: التعامل مع الأحداث - 1في هذه المقالة، سنصف بالتفصيل طرق التعامل مع الأحداث المستخدمة لكتابة الألعاب.

1. العمل بالماوس

يحتوي محرك اللعبة على طريقتين للعمل بالماوس:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);

ما عليك سوى الإعلان عن هذه الأساليب في صفك الذي يرث Gameوإضافة أي كود تريده إليها. سيقوم محرك اللعبة بالاتصال بهم عندما ينقر المستخدم على أزرار الماوس.
  1. onMouseLeftClick(int x, int y)- يتم استدعاؤه بواسطة المحرك عند النقر فوق زر الماوس الأيسر. معلماتها هي إحداثيات خلية الملعب التي حدثت فيها النقرة. تحتوي الخلية العلوية اليسرى على إحداثيات (0، 0). تحتاج إلى تجاوز هذه الطريقة لاستخدامها.

  2. onMouseRightClick(int x, int y)- يتم استدعاؤه عند النقر على زر الفأرة الأيمن. هذه الطريقة تعمل مثل onMouseLeftClick(int x, int y)الطريقة.

فيما يلي مثال على استخدام هذه الأساليب:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onMouseLeftClick(int x, int y) {
        // Set "X" in the cell where the left mouse click occurred
        setCellValue(x, y, "X");
    }

    @Override
    public void onMouseRightClick(int x, int y) {
        // Clear the cell where the right mouse click occurred
        setCellValue(x, y, "");
    }
}

2. العمل مع لوحة المفاتيح

يحتوي محرك اللعبة على طريقتين للعمل مع لوحة المفاتيح:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);

إذا كنت تريد أن يحدث شيء ما عندما يضغط المستخدم على المفتاح، فقم بإعلان هذه الأساليب في فصلك الذي يرث اللعبة، وأضف الكود الخاص بك إليها. سوف يقوم محرك اللعبة بالاتصال بهم عندما يضغط المستخدم على مفتاح أو يطلقه.
  1. onKeyPress(Key key)— يتم الاتصال به عند الضغط على أي مفتاح. المعلمة الرئيسية هي المفتاح المضغوط (أو Key.UNKNOWN).

  2. onKeyReleased(Key key)- يتم الاتصال به عند تحرير أي مفتاح. المعلمة الرئيسية هي المفتاح المقابل (أو Key.UNKNOWN).

فيما يلي مثال على استخدام هذه الأساليب:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onKeyPress(Key key) {
        // When the space bar is pressed, the center cell turns yellow
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.YELLOW);
        }
    }

    @Override
    public void onKeyReleased(Key key) {
        // When the space bar is released, the center cell changes back to white
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.WHITE);
        }
    }
}
مهم! في الإصدار الحالي من محرك اللعبة، يحتوي نوع المفتاح على مجموعة محدودة من تسع قيم:
قيمة الضغط على المفتاح من قبل المستخدم
مفتاح.أدخل قام المستخدم بالضغط على Enter
مفتاح الهروب قام المستخدم بالضغط على Esc
مفتاح.إيقاف مؤقت ضغط المستخدم على إيقاف مؤقت
مفتاح الفضاء قام المستخدم بالضغط على مسافة
مفتاح. يسار قام المستخدم بالضغط على مفتاح السهم الأيسر
مفتاح.يمين قام المستخدم بالضغط على مفتاح السهم الأيمن
Key.UP قام المستخدم بالضغط على مفتاح السهم لأعلى
زر أسفل قام المستخدم بالضغط على المفتاح لأسفل
مفتاح.غير معروف قام المستخدم بالضغط على مفتاح آخر غير تلك المذكورة أعلاه

3. العمل مع الموقت

تحدث العديد من الألعاب في الوقت الفعلي، أي حتى إذا لم يفعل المستخدم شيئًا، فإن الأحداث لا تزال تحدث في اللعبة. لتمكينك من تنفيذ مثل هذه الألعاب، أضفنا مؤقتًا إلى محرك اللعبة. يعمل الأمر على النحو التالي: تقوم بتشغيل المؤقت وتعيين الفاصل الزمني للمؤقت. على سبيل المثال، 500 مللي ثانية. ثم، كل نصف ثانية، يقوم محرك اللعبة باستدعاء onTurnTimer()الطريقة. مرارًا وتكرارًا إلى الأبد - حتى يتم إيقاف تشغيل المؤقت. إذًا كيف تستخدم المؤقت؟
  1. قم بتشغيل الموقت.

    للقيام بذلك، هناك void setTurnTimer(int timeMs)طريقة خاصة. تأخذ الطريقة كوسيطة الفاصل الزمني بين المكالمات بالمللي ثانية (1 مللي ثانية = 1/1000 ثانية). ما عليك سوى الاتصال به مرة واحدة، وسيبدأ محرك اللعبة في استدعاء الطريقة onTurn()في كل ميلي ثانية.

  2. تجاوز طريقة onTurn(int).

    للقيام بذلك، تحتاج إلى إعلان void onTurn(int step)طريقة في الفصل الذي يرث Game. سيتم استدعاء هذه الطريقة بواسطة محرك اللعبة. علاوة على ذلك، مع كل مكالمة، سيمرر محرك اللعبة إلى الطريقة معرفًا تسلسليًا للمكالمة (1، 2، 3، ...).

  3. قم بإيقاف تشغيل الموقت.

    إذا لم تعد هناك حاجة للمؤقت، على سبيل المثال، عندما يكمل المستخدم اللعبة، يمكنك إيقاف تشغيله. للقيام بذلك، تحتاج ببساطة إلى استدعاء stopTurnTimer()الأسلوب.

  4. تسريع أو تغيير الموقت.

    في بعض الألعاب، يتسارع معدل حدوث الأحداث باستمرار، لذلك سيكون من المناسب تسريع مؤقتنا (تقليل الوقت بين المكالمات). لا شيء يمكن أن يكون أسهل: اتصل setTurnTimer(int timeMs)مرة أخرى بقيمة جديدة، onTurn()وسيتغير الوقت بين المكالمات.

على سبيل المثال:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {@Override
    public void initialize() {
    	// Create a playing field that is 3 cells x 3 cells
        setScreenSize(3, 3);
        showGrid(false);
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

        setTurnTimer(500);   // Turn on the timer, the interval between calls is 500ms.
    }

    @Override
    public void onTurn(int step) {
        if(step == 100) {
            stopTurnTimer();  // If 100 calls have been made, turn off the timer
        }

        if (step % 2 == 1) {
            // If this call is odd, set the cell background to red
            setCellColor(1, 1, Color.RED);
        }
        else {
            // If this call is even, set the cell background to blue
            setCellColor(1, 1, Color.BLUE);

        }
    }}
في هذا المثال البسيط، قمنا بإنشاء حقل مكون من 3 خلايا × 3 خلايا. ثم بدأنا مؤقتًا يستدعي onTurn()الطريقة كل نصف ثانية. كل نصف ثانية، سيتغير لون الخلية، لكن محتواها لن يتغير. بعد 50 ثانية، لن يتغير اللون. هذا كل شئ حتى الان! إذا كنت تريد معرفة المزيد حول قسم "الألعاب"، فإليك بعض الوثائق المفيدة التي يمكن أن تساعدك:
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION