CodeGym /Java Blog /Random /Seksyon ng mga laro sa CodeGym: Paghawak ng kaganapan
John Squirrels
Antas
San Francisco

Seksyon ng mga laro sa CodeGym: Paghawak ng kaganapan

Nai-publish sa grupo
Ang "Mga Laro" mula sa CodeGym ay isang bagong seksyon na may malalaking kawili-wiling gawain kung saan gagawa ka ng sarili mong mga bersyon ng mga sikat na laro. Ito ay simple: ang bawat proyekto ng laro ay nahahati sa mga subtask. Kumpletuhin ang mga ito isa-isa at ang laro ay tapos na. Maaari mo itong ibahagi sa mga social network at anyayahan ang iyong mga kaibigan na maglaro. seksyong "Mga Laro" sa CodeGym: Paghawak ng kaganapan - 1Sa artikulong ito, ilalarawan namin nang detalyado ang mga paraan ng pangangasiwa ng kaganapan na ginagamit sa pagsulat ng mga laro.

1. Paggawa gamit ang mouse

Ang engine ng laro ay may dalawang pamamaraan para sa pagtatrabaho gamit ang mouse:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);

Idedeklara mo lang ang mga pamamaraang ito sa iyong klase na nagmamana ng Game, at magdagdag ng anumang code na gusto mo sa kanila. Tatawagan sila ng game engine kapag na-click ng user ang mga pindutan ng mouse.
  1. onMouseLeftClick(int x, int y)— tinawag ng makina kapag na-click ang kaliwang pindutan ng mouse. Ang mga parameter nito ay ang mga coordinate ng cell ng playing field kung saan naganap ang pag-click. Ang itaas na kaliwang cell ay may mga coordinate (0, 0). Kailangan mong i-override ang paraang ito para magamit ito.

  2. onMouseRightClick(int x, int y)— tinatawag kapag na-click ang kanang pindutan ng mouse. Ang pamamaraang ito ay gumagana tulad ng onMouseLeftClick(int x, int y)pamamaraan.

Narito ang isang halimbawa ng paggamit ng mga pamamaraang ito:

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. Paggawa gamit ang keyboard

Ang engine ng laro ay may dalawang paraan para sa pagtatrabaho sa keyboard:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);

Kung gusto mong may mangyari kapag pinindot ng user ang isang key, ideklara ang mga pamamaraang ito sa iyong klase na nagmamana ng Laro, at idagdag ang iyong code sa kanila. Tatawagan sila ng game engine kapag pinindot o inilabas ng user ang isang key.
  1. onKeyPress(Key key)— tinatawag kapag pinindot ang anumang key. Ang key parameter ay ang pinindot na key (o Key.UNKNOWN).

  2. onKeyReleased(Key key)— tinatawag kapag ang anumang susi ay inilabas. Ang key parameter ay ang kaukulang key (o Key.UNKNOWN).

Narito ang isang halimbawa ng paggamit ng mga pamamaraang ito:

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);
        }
    }
}
Mahalaga! Sa kasalukuyang bersyon ng engine ng laro, ang uri ng Key ay may limitadong hanay ng siyam na halaga:
Halaga Pindot ng user ang key
Susi.ENTER Pinindot ng user ang Enter
Susi.TAKAS Pinindot ng user ang Esc
Key.PAUSE Pinindot ng user ang Pause
Key.SPACE Pinindot ng user ang Space
Susi.LEFT Pinindot ng user ang kaliwang arrow key
Susi. TAMA Pinindot ng user ang kanang arrow key
Susi pataas Pinindot ng user ang pataas na arrow key
Susi.PABABA Pinindot ng user ang down key
Susi.HINDI ALAM Pinindot ng user ang isang key maliban sa nasa itaas

3. Paggawa gamit ang timer

Maraming mga laro ang nangyayari sa real time, ibig sabihin, kahit na walang ginagawa ang user, nangyayari pa rin ang mga kaganapan sa laro. Upang bigyang-daan kang ipatupad ang mga naturang laro, nagdagdag kami ng timer sa engine ng laro. Gumagana ito tulad nito: i-on mo ang timer at itakda ang agwat ng timer. Halimbawa, 500 milliseconds. Pagkatapos, bawat kalahating segundo ay tinatawag ng game engine ang onTurnTimer()pamamaraan. Paulit-ulit magpakailanman — hanggang sa i-off ang timer. Kaya paano mo ginagamit ang timer?
  1. I-on ang timer.

    Upang gawin ito, mayroong isang espesyal na pamamaraan. Kinukuha ng pamamaraan bilang argumento ang agwat sa pagitan ng mga tawag sa millisecond (1 millisecond = 1/1000 segundo). Kailangan mo lang itong tawagan nang isang beses, at sisimulan ng game engine na tawagan ang pamamaraan tuwingMs millisecond.void setTurnTimer(int timeMs)onTurn()

  2. I-override ang onTurn(int) method.

    Upang gawin ito, kailangan mong magdeklara ng isang pamamaraan sa klase na nagmamana ng . Ang pamamaraang ito ay tatawagin ng game engine. Higit pa rito, sa bawat tawag, ipapasa ng game engine sa pamamaraan ang isang sequential identifier para sa tawag (1, 2, 3, …).void onTurn(int step)Game

  3. I-off ang timer.

    Kung hindi na kailangan ang timer, halimbawa, kapag nakumpleto ng user ang laro, maaari mo itong i-off. Upang gawin ito, kailangan mo lamang tawagan ang pamamaraan.stopTurnTimer()

  4. Pabilisin o baguhin ang timer.

    Sa ilang laro, patuloy na bumibilis ang rate kung saan naganap ang mga kaganapan, kaya magiging maginhawang pabilisin ang aming timer (bawasan ang oras sa pagitan ng mga tawag). Walang mas madali: tumawag setTurnTimer(int timeMs)muli gamit ang isang bagong halaga, at onTurn()magbabago ang oras sa pagitan ng mga tawag.

Halimbawa:

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);

        }
    }
    …
}
Sa simpleng halimbawang ito, gumawa kami ng field na 3 cell x 3 cell. Pagkatapos ay sinimulan namin ang isang timer na tatawag sa onTurn()pamamaraan tuwing kalahating segundo. Bawat kalahating segundo, magbabago ang kulay ng cell, ngunit hindi magbabago ang nilalaman nito. Pagkatapos ng 50 segundo, hindi na magbabago ang kulay. Yun lang muna! Kung gusto mong matuto nang higit pa tungkol sa seksyong "Mga Laro," narito ang ilang kapaki-pakinabang na dokumentasyon na makakatulong:
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION