|
|
@@ -22,7 +22,8 @@ If you are a beginner, you should first link:http://www.hobbygamedev.com/digests
|
|
|
As a quick overview, answer yourself the following questions:
|
|
|
|
|
|
* Motivation
|
|
|
-** Sum up your game idea in one catchy sentence. If you can't, it's too complicated. +E.g. “Craft by day, fight by night!
|
|
|
+** Sum up your game idea in one catchy sentence. If you can't, it's too complicated. +
|
|
|
+E.g. “Craft by day, fight by night!
|
|
|
** Who's the target group? Are you making it for your friends or are you trying to attract the masses?
|
|
|
|
|
|
* Game type
|
|
|
@@ -33,12 +34,14 @@ As a quick overview, answer yourself the following questions:
|
|
|
|
|
|
* Gameplay
|
|
|
** What is the start state, what is the end state? (if applicable)
|
|
|
-** What resources does the player manage? How are resources gained, transformed, spent? +E.g. “points, health, speed, gold, xp, mana.
|
|
|
+** What resources does the player manage? How are resources gained, transformed, spent? +
|
|
|
+E.g. “points, health, speed, gold, xp, mana.
|
|
|
** How does the player interact? Define rules, challenges, game mechanics.
|
|
|
** What state is considered winning, and what losing, or is it an open world?
|
|
|
|
|
|
* Multi-media assets
|
|
|
-** Which media will you need? How will you get this content? +E.g. models, terrains; materials, textures; noises, music, voices; video, cutscenes; spoken/written dialog; level maps, quests, story; AI scripts.
|
|
|
+** Which media will you need? How will you get this content? +
|
|
|
+E.g. models, terrains; materials, textures; noises, music, voices; video, cutscenes; spoken/written dialog; level maps, quests, story; AI scripts.
|
|
|
|
|
|
* Interface
|
|
|
** Can you achieve a high degree of input control? (Even minor navigation and interaction glitches make the game unsolvable.)
|
|
|
@@ -54,7 +57,8 @@ Use an link:http://en.wikipedia.org/wiki/Issue_tracking_system[issue and bug tra
|
|
|
. Pre-Alpha Development
|
|
|
** Artwork: Test asset loading and saving with mock-ups and stock art.
|
|
|
** Lay out the overall application flow, i.e. switching between intro / options / game screen, etc.
|
|
|
-** Get one typical level working before you can announce the Alpha Release. +E.g. if the game is a “Jump'n'Run, jumping and running must work.
|
|
|
+** Get one typical level working before you can announce the Alpha Release. +
|
|
|
+E.g. if the game is a “Jump'n'Run, jumping and running must work.
|
|
|
|
|
|
. Alpha Release
|
|
|
. Pre-Beta Development
|
|
|
@@ -82,7 +86,8 @@ How you name or number these stages is fully up to your team. Development teams
|
|
|
Whether you work in a team or alone, keeping a version controlled repository of your code will help you roll-back buggy changes, or recover old code that someone deleted and that is now needed again.
|
|
|
|
|
|
* Treat commit messages as messages to your future self. “Made some changes is _not_ a commit message.
|
|
|
-* The jMonkeyEngine SDK supports Subversion, Mercurial, and Git. +If you don't know which to choose, Subversion is a good choice for starters.
|
|
|
+* The jMonkeyEngine SDK supports Subversion, Mercurial, and Git. +
|
|
|
+If you don't know which to choose, Subversion is a good choice for starters.
|
|
|
* Set up your own local server, or get free remote hosting space from various open-source dev portals like link:http://sourceforge.net/[Sourceforge], link:https://github.com/[Github], link:https://bitbucket.org/[bitbucket] (supports private projects), link:http://home.java.net/create-project[Java.net]…
|
|
|
|
|
|
|
|
|
@@ -121,7 +126,8 @@ Learn details about the <<jme3/intermediate/multi-media_asset_pipeline#,Multi-Me
|
|
|
|
|
|
[NOTE]
|
|
|
====
|
|
|
-Many game developers dream of creating their very own “MMORPG with full-physics, AI, post-rendering effects, multi-player networking, procedurally generated maps, and customizable characters. So why aren't there tons of MMORPGs out there? +Even for large experienced game producers, the creation of such a complex game is time-intensive and failure-prone. How familiar are you with multi-threading, persistence, optimization, client-server synchonization, …? Unless your answer is “very!, then start with a single-player desktop game, and work your way up – just as the pros did when they started.
|
|
|
+Many game developers dream of creating their very own “MMORPG with full-physics, AI, post-rendering effects, multi-player networking, procedurally generated maps, and customizable characters. So why aren't there tons of MMORPGs out there? +
|
|
|
+Even for large experienced game producers, the creation of such a complex game is time-intensive and failure-prone. How familiar are you with multi-threading, persistence, optimization, client-server synchonization, …? Unless your answer is “very!, then start with a single-player desktop game, and work your way up – just as the pros did when they started.
|
|
|
====
|
|
|
|
|
|
|
|
|
@@ -142,7 +148,8 @@ For your future game releases, you will want to rely on your own framework (base
|
|
|
|
|
|
[TIP]
|
|
|
====
|
|
|
-Writing and reusing (extending) your own base framework saves you time. When you update your generic base classes, all your games that extend them benefit from improvements to the base (just as all jME-based games benefit of improvements to the jME framework). +Also, your own framework gives all your games a common look and feel.
|
|
|
+Writing and reusing (extending) your own base framework saves you time. When you update your generic base classes, all your games that extend them benefit from improvements to the base (just as all jME-based games benefit of improvements to the jME framework). +
|
|
|
+Also, your own framework gives all your games a common look and feel.
|
|
|
====
|
|
|
|
|
|
|
|
|
@@ -170,14 +177,18 @@ Acknowledge whether you want a feature because it is necessary for gameplay, or
|
|
|
|
|
|
[WARNING]
|
|
|
====
|
|
|
-*Avoid the Anti-Pattern:* Don't design complex role-based classes using Java inheritance, it will result in an unmaintainable mess. +Example: You start extending `Node` –> `MyMobileNode` –> `MyNPC`. Then you extend `MyFighterNPC` (defends, attacks) and `MyShopKeeperNPC` (trades) from `MyNPC`. What if you need an NPC that trades and defends itself, but doesn't attack? Do you extend MyShopKeeperNPC and copy and paste the defensive methods from MyFighterNPC? Or do you extend MyFighterNPC and override the attacking methods of its parent? Neither is a clean solution. +Wouldn't it be better if behaviours were a separate “system, and attributes were separate “components that you add to the “entity that needs them?
|
|
|
+*Avoid the Anti-Pattern:* Don't design complex role-based classes using Java inheritance, it will result in an unmaintainable mess. +
|
|
|
+Example: You start extending `Node` –> `MyMobileNode` –> `MyNPC`. Then you extend `MyFighterNPC` (defends, attacks) and `MyShopKeeperNPC` (trades) from `MyNPC`. What if you need an NPC that trades and defends itself, but doesn't attack? Do you extend MyShopKeeperNPC and copy and paste the defensive methods from MyFighterNPC? Or do you extend MyFighterNPC and override the attacking methods of its parent? Neither is a clean solution. +
|
|
|
+Wouldn't it be better if behaviours were a separate “system, and attributes were separate “components that you add to the “entity that needs them?
|
|
|
====
|
|
|
|
|
|
|
|
|
You write Java classes named `Controls` to implement your Game Entities, and define an Entity's visuals, attributes, and behaviours. In jME, `Spatial`s (`Nodes` or `Geometry`s) are the visual representation of the game entity in the scene graph.
|
|
|
|
|
|
-* Game entities have *attributes* – All Entities are neutral _things_, only their attributes define what an entity actually _is_ (a person or a brick). In jME, we call these class fields of Spatials “user data. +Example: Players have *class fields* for `id, health, coins, inventory, equipment, profession`.
|
|
|
-* Game entities have *behaviours* – Behaviour systems communicate about the game state and modify attributes. In jME, these game mechanics are implemented in modular `update()` methods that all hook into the main update loop. +Example: Players have *methods* such as `walk(), addGold(), getHealth(), pickUpItem(), dropItem(), useItem(), attack()`.
|
|
|
+* Game entities have *attributes* – All Entities are neutral _things_, only their attributes define what an entity actually _is_ (a person or a brick). In jME, we call these class fields of Spatials “user data. +
|
|
|
+Example: Players have *class fields* for `id, health, coins, inventory, equipment, profession`.
|
|
|
+* Game entities have *behaviours* – Behaviour systems communicate about the game state and modify attributes. In jME, these game mechanics are implemented in modular `update()` methods that all hook into the main update loop. +
|
|
|
+Example: Players have *methods* such as `walk(), addGold(), getHealth(), pickUpItem(), dropItem(), useItem(), attack()`.
|
|
|
|
|
|
|
|
|
[TIP]
|
|
|
@@ -196,7 +207,6 @@ If your game is even more complex, you may want to learn about “real Entity Sy
|
|
|
* link:http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/[http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/]
|
|
|
* link:http://www.gamasutra.com/blogs/MeganFox/20101208/88590/Game_Engines_101_The_EntityComponent_Model.php[http://www.gamasutra.com/blogs/MeganFox/20101208/88590/Game_Engines_101_The_EntityComponent_Model.php]
|
|
|
* link:http://gamedev.stackexchange.com/questions/28695/variants-of-entity-component-systems[http://gamedev.stackexchange.com/questions/28695/variants-of-entity-component-systems]
|
|
|
-* link:http://louisstowasser.com/post/19279778476/entity-component-systems-inheritance-vs-composition[http://louisstowasser.com/post/19279778476/entity-component-systems-inheritance-vs-composition]
|
|
|
* link:http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/[http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/]
|
|
|
* link:http://entity-systems.wikidot.com/[http://entity-systems.wikidot.com/]
|
|
|
|
|
|
@@ -322,23 +332,28 @@ a|Distribution
|
|
|
a|Pros
|
|
|
a|Cons
|
|
|
|
|
|
-a|Desktop Launcher +(.EXE, .app, .jar+.sh)
|
|
|
+a|Desktop Launcher +
|
|
|
+(.EXE, .app, .jar+.sh)
|
|
|
a|This is the standard way of distributing desktop applications. The jMonkeyEngine SDK can be configured to automatically create zipped launchers for each operating system.
|
|
|
a|You need to offer three separate, platform-dependent downloads.
|
|
|
|
|
|
-a|Desktop Application +(.JAR)
|
|
|
+a|Desktop Application +
|
|
|
+(.JAR)
|
|
|
a|Platform independent desktop application.
|
|
|
a|User must have Java configured to run JARs when they are opened; or user must know how to run JARs from command line; or you must provide a custom JAR wrapper.
|
|
|
|
|
|
-a|Web Start +(.JNLP)
|
|
|
+a|Web Start +
|
|
|
+(.JNLP)
|
|
|
a|The user accesses a +++<abbr title="Uniform Resource Locator">URL</abbr>+++, saves the game as one executable file. Easy process, no installer required. You can allow the game to be played offline.
|
|
|
a|Users need network connection to install the game. Downloading bigger games takes a while as opposed to running them from a CD.
|
|
|
|
|
|
-a|Browser Applet +(.+++<abbr title="HyperText Markup Language">HTML</abbr>++++.JAR)
|
|
|
+a|Browser Applet +
|
|
|
+(.+++<abbr title="HyperText Markup Language">HTML</abbr>++++.JAR)
|
|
|
a|Easy to access and play game via most web browsers. Userfriendly solution for quick small games.
|
|
|
a|Game only runs in the browser. Game or settings cannot be saved to disk. Some restrictions in default camera navigation (jME cannot capture mouse.)
|
|
|
|
|
|
-a|Android +(.APK)
|
|
|
+a|Android +
|
|
|
+(.APK)
|
|
|
a|Game runs on Android devices.
|
|
|
a|Android devices do not support post-procesor effects.
|
|
|
|
|
|
@@ -347,6 +362,7 @@ a|Android devices do not support post-procesor effects.
|
|
|
Which ever method you choose, a Java-Application works on the main operating systems: Windows, Mac +++<abbr title="Operating System">OS</abbr>+++, Linux, Android.
|
|
|
|
|
|
The distribution appears in a newly generated `dist` directory inside your project directory. These are the files that you upload or burn to CD to distribute to your customers.
|
|
|
+
|
|
|
'''
|
|
|
|
|
|
See also:
|