Skip to content
T

Tips

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) i src/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 i src/main/java (og src/test/java i test-fasen), men lar resten ligge urørt. Og så kopierer den alt i src/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ører mvn 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 med clean 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 med mvn -Dmaven.test.skip=true clean package.
  • hvis java -jar … sier den ikke finner klassen, sjekk main.class i pom.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, bruk NavnPåEnEllerAnnenKlasse.class.getResourceAsStream("…")) Det finnes også en getResource() metode som gir deg en URL – den er ikke 100% trygg å bruke, siden fil-URLen ofte vil referere inn i en jar-fil – så beste løsningen er getResourceAsStream()
  • med getResourceAsStream("duck.png") leter den i samme mappe som klassen ligger i (dvs. i praksis src/main/resources/game/duck.png hvis klassen er src/main/java/game/Duck.java, mens hvis stinavnet begynner med / så vil den lete på toppnivå i prosjektet (dvs. i praksis src/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 bruker new 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.

Tiles, collision, slopes

Testing

Nettverk

LibGDX