Skip to content

pkstudio/JavaGameDevelopmentKit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

code/canvas/

Enkel spillmotor som lar deg lage visuelle applikasjoner som tegnes i et vindu med gitt størrelse.

Komme i gang

La oss starte med å opprette et tomt vindu.

Denne guiden tar utgangspunkt i at du har opprettet en pakke og en klasse i denne pakken.

import studio.programkode.jgdk.API;
import studio.programkode.jgdk.Launcher;
import studio.programkode.jgdk.Plugin;

Disse 3 klassene er grunnsteinen i det å komme i gang.

La oss ta en titt på et utgangspunkt for opprette et tomt vindu som er 640x480 stort (piksler):

import studio.programkode.jgdk.Launcher;
import studio.programkode.jgdk.Plugin;

class TestWindow extends Plugin {
    static void main() {
        Launcher.createWindow(640, 480, new TestWindow());
    }
}

Koden over er det som trengs som et minimum for å opprette et vindu som vises med en bakgrunnsfarge.

La oss utvide dette til å, for eksempel, tegne en firkant!

import studio.programkode.jgdk.Launcher;
import studio.programkode.jgdk.Plugin;

class TestWindow extends Plugin {
    static void main() {
        Launcher.createWindow(640, 480, new TestWindow());
    }
    
    public void draw(API window) {
        window.drawRectangle(50, 50, 100, 100);
    }
}

Måten dette fungerer er at en plugin er kode som kjøres av spillmotoren for å utvide dens funksjonalitet.

Det finnes 3 metoder for å gjøre dette, forutenom Launcher.createWindow(...) for å opprette selve vinduet:

void setup(API.Setup window) {
    // kjøres 1 gang før loop-en starter
}

void update(API.Update window) {
    // kjøres 10 ganger i sekundet
}

void draw(API window) {
    // kjøres 20 ganger i sekundet
}

Hvorfor to ulike metoder som oppdateres flere ganger i sekundet?

draw(API window)-metoden er ment for å kun tegne til vinduet, hvor det ikke er meningen å kjøre noe "tung" kode.

update(API.Update window)-metoden er hvor du kan ha tyngre utregnelser som f.eks. logikk eller fysikk.

Poenget er at felter brukes for å håndtere data, hvor gjerne setup(API.Setup window)-metoden brukes for å sette initialisere nødvendige verdier. Hvorfor kan ikke dette gjøres i konstruktøren f.eks.? Vinduet er ikke tilgjengelig når konstruktøren kjøres! Hva om du ønsker å lagre midtpunket i vinduet før du begynner å gjøre utregnelser?


Ta gjerne en titt på eksemplene du finner i innunder games og examples mappene.


Koordinatsystemet

Vinduet har 2 akser, en X- og en Y-akse.

X-aksen er negativ venstre og positiv høyre, hvor Y-aksen er negativ opp og positiv ned.

Det øverste punktet til venstre er x0 y0, hvor vi gjerne bruker punkter for å representere disse posisjonene:

import studio.programkode.jgdk.library.math.geometry.Point;

private Dimension size;

void setup(API.Setup window) {
    this.position = new Point(0, 0);
}

Størrelser definereres som en dimensjon; Dersom vi har et punkt og en størrelse, så kan vi tegne et rektangel slik også:

private Point position;
private Dimension size;

void setup(API.Setup window) {
    this.position = new Point(25, 25);
    this.size = new Dimension(50, 50);
}

void draw(API window) {
    window.drawRectangle(this.position, this.size);
}

Hva hvis du ønsker å skrive noe tekst midt på skjermen?

private Point center;

void setup(API.Setup window) {
    this.center = window.getCenterPoint();
}

void draw(API window) {
    window.drawTextCentered(this.center, "middle of the window");
}

Det finnes en del metoder, hvor jeg anbefaler å sjekke ut hva IntelliJ foreslår etter du skriver window. inne i en av de tre metodene.


Hva en kan forvente

Det er mulig å lage enkle spill eller bruke vinduet for å lage et visuelt brukergrensesnitt for ditt program.

Dette er dog avansert og krever en del av deg med tanke på å være nysgjerrig og det å forsøke seg fram.

Om det er noe du savner eller ønsker implementert, gi meg en lyd!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages