Hjälp med ett enkelt 2D-spel i Java.

Permalänk
Medlem

Hjälp med ett enkelt 2D-spel i Java.

Tjabba!

Jag har under sommaren suttit med ett litet projekt som jag haft under en lång tid. Jag håller på att utforma ett 2D-spel i Java. Meningen är att det ska likna "Zelda: A Link to the Past". Tycker att jag kommit en ganska bra bit nu, men har fastnat när det kommer till att lägga till ett menysystem och diverse grafiska saker som inventory etc.

Har målat upp en bild för att beskriva alla klasser på ett lätt och smidigt vis.

http://imgur.com/y18yw

Game - Själva mainklassen, innehåller mainfunktionen samt skapar GController och GView.

GView- GView är vy-klassen. Den extendar JFrame och är såldes ett fönster. Den har även en GPanel som rityta. När GController säger till GView att uppdatera vyn kopieras en lista med alla GameObjects över till GameView. GameView skickar denna vidare till GPanel som i sin tur ritar om hela skärmen med den nya GameObject-listan.

GPanel- extendar JPanel, sköter utritningen av alla GameObjects på ritytan.

GController är klassen som styr och ställer. Innehåller en timer som säger åt modellerna att uppdatera sig och vyn att rita om allt.

GScenograph- är en databas med alla Gameobject som finns. Innehåller en massa olika listor beroende på typen av gameobject. (ex playerList, enemyList, gameObjectList)

GPhysEngine- Loopar igenom alla MovingObjects och uppdaterar deras position, sköter kollisionhantering och kollisionreaktion. Om en player tex stöter in i en fiende skall ju playerns liv reduceras.

GameObject- är huvudobjektet för alla spelobjekt i spelet. Den har en position (x,y), en bredd och höjd, en ImageIcon, samt lite true/false-variabler så som blockingEnabled, paintMe.

MovingObject- ärver av GameObbect, har däröver en hastighet dx, dy samt lite moveRight, moveLeft, moveup och moveDown för att räkna ut åt vilket håll den ska ta vägen. Dessa sätts av en Controller, vilket kan vara lite vad som helst (KeyBoard, AI etc.)

ForeGround- helt enkelt bara en foreground, kanske lite mol eller något.

Ni fattar säkert vad de andra är. Alla ärver av varandra enligt trädet under GameObject.

Controller är också en toppklass. Det är meningen att MovingObject ska ha en typ av Controller. Player ska tex ha en KeyboardController medan Enemy har en AIController.

Tycker själv att strukturen är helt okej denna gången. Vad tycker ni?

Har dock stött på ett litet problem. Ett menysystem! Var sjutton ska jag trycka in det? Och hur ska det styras? Antar att jag behöver en klass StateManager eller något som håller nuvarande state. Dock skulle ju min GView behöva expanderas mer för att ta hänsyn till vad som ska ritas upp vid olika states?

Skulle kunna tänka mig att min GController sätter states i StateManager, medan min GView kontrollerar vilket state spelet befinner sig i? Exempelvis ska ju inga buskar, träd, hus,players eller enemies ritas upp när man startar upp spelet. Då ska endast en meny visas och inget mer. Känns som om min GView kan bli ganska stor och klumpig om det ska in en massa switch-case eller if-else i den? Jag tänker mestadels på att en inventory för spelare ska finnas, sedan kanske det blir fler saker som ska in. Nya JPanel som ska användas. Känns som om det kan bli ganska stökigt i min vy-klass!

Väldigt tacksam för lite förslag! är det något som är oklart så är det bara att fråga! blev lite kortfattad beskrivning...

Tack så mycket!

Permalänk
Medlem

Erkänner att jag inte riktigt satt mig in i din design i detalj, men jag skulle löst det med flera states där varje state har en vy som kan renderas och någon form av logik som uppdateras (lite XNA-style). Säg att du har ett interface IState med funktionen render så kan du kalla render på active state (active state är förstås av typen IState). Då skulle du såklart ha ett state för menyn och ett för spelet. Det skulle innebära att du bara behöver ändra active state för att byta mellan meny och spel, och att du bara kallar render varje renderingscykel och update varje uppdateringscykel på active state.

Om du tycker det verkar konstigt eller vill ha en bättre förklaring så fråga gärna så kan jag slänga ihop något snabbt kodexempel istället.

Permalänk
Medlem
Skrivet av Goose7:

Erkänner att jag inte riktigt satt mig in i din design i detalj, men jag skulle löst det med flera states där varje state har en vy som kan renderas och någon form av logik som uppdateras (lite XNA-style). Säg att du har ett interface IState med funktionen render så kan du kalla render på active state (active state är förstås av typen IState). Då skulle du såklart ha ett state för menyn och ett för spelet. Det skulle innebära att du bara behöver ändra active state för att byta mellan meny och spel, och att du bara kallar render varje renderingscykel och update varje uppdateringscykel på active state.

Om du tycker det verkar konstigt eller vill ha en bättre förklaring så fråga gärna så kan jag slänga ihop något snabbt kodexempel istället.

Det låter väldigt vettigt faktiskt! Har en klass GameView (JFrame) som innehåller en GamePanel (JPanel)...GameView skulle kunna ha olika GamePanels att uppdatera beroende på vilket state spelet befinner sig i!

Permalänk
Medlem

Kommer ta upp projektet nu under jul igen, men känner att jag nog behöver lite fler tips på att ta det hela vidare!

Tack!