[TUT] Game development 09 - Entities, Mobs en Players framework

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Dit is een vervolg op: [TUT] Game development 08 - Het renderen van het level

    Hallo ICTScripters,

    Allereerst excuses dat deze tutorial iets langer heeft geduurd dan gedacht, ik ben momenteel erg druk met het afronden van mijn schooljaar. Hierdoor heb ik naast mijn game development project op ICTScripters voor school nog 9 projecten heb die afgerond moeten worden. Toch zal ik proberen zo snel mogelijk weer een aantal tutorials plaatsen alleen heb begrip hiervoor wanneer dit langer duurt! (in dit geval al 2 weken)

    Vandaag gaan we eerst beginnen met het repareren van de zwarte randen. Om dit te doen gaan we een kleine aanpassing in de Screen en Level klasse maken verander daarom de volgende methoden:

    Source Code

    1. public void renderTile(int xp, int yp, Tile tile) {
    2. xp -= xOffset;
    3. yp -= yOffset;
    4. for (int y = 0; y < tile.sprite.SIZE; y++) {
    5. int ya = y + yp;
    6. for (int x = 0; x < tile.sprite.SIZE; x++) {
    7. int xa = x + xp;
    8. // Avoids to render tiles outside the screen.
    9. if (xa < -tile.sprite.SIZE || xa >= width || ya < 0 || ya >= height) {
    10. break;
    11. }
    12. if (xa < 0) {
    13. xa = 0;
    14. }
    15. pixels[xa + ya * width] = tile.sprite.pixels[x + y * tile.sprite.SIZE];
    16. }
    17. }
    18. }
    Display All


    Source Code

    1. public void render(int xScroll, int yScroll, Screen screen) {
    2. screen.setOffset(xScroll, yScroll);
    3. int x0 = xScroll >> 4;
    4. int x1 = (xScroll + screen.width + 16) >> 4;
    5. int y0 = yScroll >> 4;
    6. int y1 = (yScroll + screen.height + 16) >> 4;
    7. // Render the level.
    8. for (int y = y0; y < y1; y++) {
    9. for (int x = x0; x < x1; x++) {
    10. getTile(x, y).render(x, y, screen);
    11. }
    12. }
    13. }
    Display All


    Door deze aanpassing renderen we in de X en Y rij van de map een extra tile en zorgen we ervoor dat de boundary geen exceptions veroorzaakt. Dan is het nu tijd om de entities, mobs en spelers aan te maken.

    Wat is een entity/entiteit?
    Een entity is een definitie die erg lastig is uit te leggen waarbij er binnen de filosofie hierover verschillend wordt gedacht. Het kan namelijk alles zijn, het is gewoon "iets" dat bestaat binnen de game als apart object. In onze game zal een entity voor nu het volgende bevatten:
    • Een x en y positie op het scherm.
    • Een plek waar wordt aangegeven of de entiteit wel of niet op het scherm komt.
    • Het level waarin de entity gerenderd moet worden.
    • Een Random voor de Artificial Intelligence onderdelen.
    • Een manier om de logica te updaten.
    • Een manier om te renderen.
    • Een manier om de entiteit te verwijderen.
    Maak daarom een nieuwe klasse Entity aan en plaats deze in een nieuwe package entity:

    Source Code

    1. public abstract class Entity {
    2. public int x, y;
    3. private boolean removed = false;
    4. protected Level level;
    5. protected final Random random = new Random();
    6. public void update() {
    7. }
    8. public void render(Screen screen) {
    9. }
    10. public void remove() {
    11. removed = true;
    12. }
    13. public boolean isRemoved() {
    14. return removed;
    15. }
    16. }
    Display All

    Let op: Tijdens het fixen van de imports met CTRL+SHIFT+O moet je erop letten dat je de Level klasse van de Game importeert, niet die van Java!


    Nu we entiteit binnen de game hebben aangemaakt kunnen we beginnen met het maken van een Mob dit is binnen de Game kort uitgelegd een creature/wezen maar... dit wordt natuurlijk ook jijzelf als speler. Hiervoor hebben wij de Entity klasse al maar wordt er aan een Mob extra data toegevoegd namelijk:
    • Een sprite.
    • Een kant waar de mob naartoe kijkt.
    • Of een mob beweegt + methoden
    • Of een mob collisions heeft.
    Maak daarom een nieuwe klasse Mob, deze plaats je in een subpackage van entity entity.mob:

    Source Code

    1. public abstract class Mob extends Entity {
    2. protected Sprite sprite;
    3. protected int dir = 0;
    4. protected boolean moving = false;
    5. public void move() {
    6. }
    7. @Override
    8. public void update() {
    9. }
    10. public void render() {
    11. }
    12. private boolean collision() {
    13. return false;
    14. }
    15. }
    Display All


    Dan gaan we nu beginnen aan de Player klasse, dit is waar het de komende tutorials allemaal om draait. Zoals de naam het al zegt, de player dat ben jij, dit is dus het karakter dat bestuurt word d.m.v. in ons geval het toetsenbord. Maak daarom een nieuwe klasse Player aan in de package entity.mob. De player klasse wordt in de package mob geplaatst omdat een Player grotendeels dezelfde functionaliteiten krijgt als een Mob (npc).

    Source Code

    1. public class Player extends Mob {
    2. public Player() {
    3. }
    4. public Player(int x, int y) {
    5. this.x = x;
    6. this.y = y;
    7. }
    8. public void move(int xa, int ya) {
    9. }
    10. @Override
    11. public void update() {
    12. }
    13. @Override
    14. public void render() {
    15. }
    16. }
    Display All


    Met het aanmaken van de Player klasse zijn we ten einde gekomen van de tutorial. Weinig code en redelijk veel theorie, ik raad je daarom ook aan de code goed te bekijken en hierover na te denken omdat het allemaal nog redelijk abstract is. In de volgende tutorial gaan we werken aan de player input en gaan we de player renderen op de map.

    Verder wil ik ook vragen wat jullie tot nu toe van de tutorials vinden ;)? Het lijkt me leuk een beetje inzicht te krijgen wie deze allemaal volgen, en wat er goed en slecht is in de uitleg van de tutorials, want ik snap dat sommige materie wat lastig uit te leggen is.

    Met vriendelijke groet,

    Michael Beers
    Dit was mijn spreekbeurt, zijn er nog vragen?

    985 times read

Comments 1

  • R.Haentjens -

    Ik vind je tutorials geweldig, en probeer ze ook allemaal te volgen! Soms vind ik het lastig om bepaalde dingen te begrijpen, maar na het herlezen/meerdere malen lezen kom ik er wel! :)