Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

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.

importstudio.programkode.jgdk.API;
importstudio.programkode.jgdk.Launcher;
importstudio.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):

importstudio.programkode.jgdk.Launcher;
importstudio.programkode.jgdk.Plugin;
classTestWindowextendsPlugin {
staticvoidmain() {
Launcher.createWindow(640, 480, newTestWindow());
}
}

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!

importstudio.programkode.jgdk.Launcher;
importstudio.programkode.jgdk.Plugin;
classTestWindowextendsPlugin {
staticvoidmain() {
Launcher.createWindow(640, 480, newTestWindow());
}
publicvoiddraw(APIwindow) {
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:

voidsetup(API.Setupwindow) {
// kjøres 1 gang før loop-en starter
}
voidupdate(API.Updatewindow) {
// kjøres 10 ganger i sekundet
}
voiddraw(APIwindow) {
// 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:

importstudio.programkode.jgdk.library.math.geometry.Point;
privateDimensionsize;
voidsetup(API.Setupwindow) {
this.position = newPoint(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å:

privatePointposition;
privateDimensionsize;
voidsetup(API.Setupwindow) {
this.position = newPoint(25, 25);
this.size = newDimension(50, 50);
}
voiddraw(APIwindow) {
window.drawRectangle(this.position, this.size);
}

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

privatePointcenter;
voidsetup(API.Setupwindow) {
this.center = window.getCenterPoint();
}
voiddraw(APIwindow) {
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

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages