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/resourceshvis du f.eks. har kart e.l. som bare blir brukt til testing). Maven kompilerer alle.javafiler den finner isrc/main/java(ogsrc/test/javai test-fasen), men lar resten ligge urørt. Og så kopierer den alt isrc/main/resourcestil 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 packageog såjava -jar target/PROSJEKTNAVN-1.0-SNAPSHOT-fat.jar. Ha medcleanså 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.classipom.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.pnghvis 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