Tips
- Prosjektpresentasjoner (oversikt)
INF112 Prosjekttips
- JSON – lese/skrive data i tekstformat
- Diagrammer – for å illustrere / få oversikt over arkitektur og oppførsel
- CI/CD – continuous testing / integration / delivery / deployment
- Testing og libGDX
GENERELLE TIPS FOR Å FÅ TING TIL Å KJØRE PÅ FLERE PLATFORMER:
- Maven trenger at du legger alle datafiler (ikke-
.java
-filer) isrc/main/resources/
(evt.src/test/resources
hvis du f.eks. har kart e.l. som bare blir brukt til testing). Maven kompilerer alle.java
filer den finner isrc/main/java
(ogsrc/test/java
i test-fasen), men lar resten ligge urørt. Og så kopierer den alt isrc/main/resources
til samme sted som den legger klassefilene –target/classes
, som er mappen Maven og Eclipse kjører ting fra, og som blir zippet opp i jar-filen når du kjørermvn package
- du kan sjekke at alt er med ved å kjøre
mvn clean package
og såjava -jar target/PROSJEKTNAVN-1.0-SNAPSHOT-fat.jar
. Ha medclean
så er du sikker på at ikke Eclipse/IntelliJ har lagt til noen filer på egenhånd. Hvis du hindres av at noen av testene feiler, kan du kompilere medmvn -Dmaven.test.skip=true clean package
. - hvis
java -jar …
sier den ikke finner klassen, sjekkmain.class
ipom.xml
– den skal være slik som du ville referert til klassen i Java-kode (f.eks.game.Main
), og ikke en fil-sti med/
osv. - noen systemer (Linux/Unix) gjør forskjell på små og store bokstaver i sti/mappenavn så pass på at navn på bilder/lyder er stavet på nøyaktig samme måte i koden. (ingen lettvint måte å sjekke på uten å teste på Linux)
- generelt kan du tenke at src/X/Y/ forsvinner fra alle stinavn når programmet kjører og blir til rot-mappen i jar-filen (/).
- Gdx.files.internal leser alle filer relativt til det
- Hvis du ikke bruker libGDX, er det best å åpne/laste inn filer ved hjelp av Java sin class loader:
getClass().getResourceAsStream("/img/duck.png")
. (hvis du er i en statisk metode, brukNavnPåEnEllerAnnenKlasse.class.getResourceAsStream("…")
) Det finnes også engetResource()
metode som gir deg en URL – den er ikke 100% trygg å bruke, siden fil-URLen ofte vil referere inn i enjar
-fil – så beste løsningen ergetResourceAsStream()
- med
getResourceAsStream("duck.png")
leter den i samme mappe som klassen ligger i (dvs. i praksissrc/main/resources/game/duck.png
hvis klassen ersrc/main/java/game/Duck.java
, mens hvis stinavnet begynner med/
så vil den lete på toppnivå i prosjektet (dvs. i praksissrc/main/resources/
). (sjekk dokumentasjonen for de eksakter reglene...) - det er som regel best å bruke PNG (evt. JPG for bakgrunner – men Ikke BMP) for grafikk, og OGG (evt. MP3) for lyd, evt WAV for korte lyder
- hvis du laster inn bilder med
new Image(getClass().getResourceAsStream("/img/duck.png")
(JavaFX) eller [new Pixmap(Gdx.files.internal("img/duck.png"))
] e.l. (libGDX) så leser den inn på nytt hver gang du brukernew Image()
, så du må passe på at den ikke gjør det for hver gang du skal tegne noe. du kan f.eks. cache innlastede bilder i et hashmap. (trivielt JavaFX-eksempel fra inf101: https://retting.ii.uib.no/inf101.v17.oppgaver/inf101.v17.sem2/-/blob/master/src/inf101/simulator/MediaHelper.java)
Eksterne lenker
Generelt
- Red Blob Games – Interaktiv visuell forklaring av relevante algoritmer/datastrukturer; f.eks A* sti-finning, 2D lys/skygge synlighet, grids, osv.
Design/arkitektur
Game loop / timing
Hvordan sørge for at spillet er like raskt uavhengig av maskinen / hvor lang tid det tar å tegne grafikken – og, i mer kompliserte tilfeller, hvordan synkronisere tid når du har nettverk multiplayer.
- Fix Your Timestep – den klassiske forklaringen
- Understanding Delta Time
- Game Loop
- How to make your game run at 60fps
Tiles, collision, slopes
- Sonic Physics Guide – slopes, kollisjon, hopping, løping, kamera, etc
- The Guide to Implementing 2D Platformers