CodeGym /בלוג Java /Random-HE /מדור משחקים ב- 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 המשתמש לחץ על Enter
מפתח.בריחה המשתמש לחץ על Esc
Key.PAUSE המשתמש לחץ על השהה
מפתח.רווח המשתמש לחץ על רווח
מקש.שמאלה המשתמש לחץ על מקש החץ שמאלה
מפתח.ימין המשתמש לחץ על מקש החץ ימינה
מפתח למעלה המשתמש לחץ על מקש החץ למעלה
מקש.DOWN המשתמש לחץ על מקש למטה
מפתח.לא ידוע המשתמש לחץ על מקש שאינו אלו שלמעלה

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 תאים x 3 תאים. ואז התחלנו טיימר שיקרא לשיטה onTurn()כל חצי שנייה. בכל חצי שנייה, צבע התא ישתנה, אך תוכנו לא ישתנה. לאחר 50 שניות, הצבע לא ישתנה יותר. זה הכל לעת עתה! אם אתה רוצה ללמוד עוד על הקטע "משחקים", הנה כמה תיעוד שימושי שיכול לעזור:
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION