May 212013
 


<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>Fully Qualified main class here</Main-Class>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>

Jan 182013
 

<project>
<scm>
<connection>scm:svn:http://svn/folder</connection>
<developerConnection>scm:svn:http://svn/folder</developerConnection>
<url>http://svn/folder</url>
</scm>

<plugins>
<plugin>

<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<SCM-Revision>${buildNumber}</SCM-Revision>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>

</project>

Oct 312012
 

Start java application with the following arguments
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<port>
-Dcom.sun.management.jmxremote.authenticate=false

Run jconsole from the command line pointing the to PID of the java process

jconsole <PID>

for example
jconsole 1234

Oct 052012
 

Problem:
Create a load test that submits a web form containing a unique token to prevent multiple form submissions.

Solution:
jMeter 2.6
Use jMeter Regular Expression Extractor ( Found in Right Click Menu >> Add >> Post Processors >> Regular Expression Extractor)

How To:
On http request 1 there will be a hidden input field that contains the token to be submited.
On http request 2 we will need to place this token value.

On http request 1, add a regular expression extractor with the following values.

Reference Name:TOKEN
Regular Expression:name=”TOKEN” value=”(.+?)”>
Template:$1$
Match No:1
Default Value: NOT FOUND

On http request 2 insert the token value into the paremeters section with the variable ${TOKEN}

Aug 072012
 

Another Quick Reference Code Snippet

StringBuilder tempString = new StringBuilder(2 * bytes.length);
for (byte b : bytes) {
tempString.append("0123456789ABCDEF".charAt((b & 0xF0) >> 4));
tempString.append("0123456789ABCDEF".charAt((b & 0x0F)));
}
return tempString.toString();

Source:

http://stackoverflow.com/questions/5470219/java-get-md5-string-from-message-digest

Jul 062012
 

Added Working Turrets that shoot.
All entities have health, when they run out of health they are removed from the scene.
Sounds are activated when the player or the turret shoots as well as on projectile impact.

Jul 032012
 

Using the Slick2d game engine there are multiple ways of creating animations.
The following examples will do the same exact thing, but its two different ways of writing it.

Imports
import org.newdawn.slick.Animation;
import org.newdawn.slick.SpriteSheet;

Example 1
SpriteSheet runningSS = new SpriteSheet("/path/to/sprite.png", 24, 32);
Animation runningAnimation = new Animation();
runningAnimation.setAutoUpdate(true);
runningAnimation.addFrame(runningSS.getSprite(0, 0), 100);
runningAnimation.addFrame(runningSS.getSprite(1, 0), 100);
runningAnimation.addFrame(runningSS.getSprite(2, 0), 100);

runningSS.getSprite(1, 0) is not the pixel value, but the sprite location if the whole image were broken up into cells based on the width and height defined when creating the sprite sheet

Example 2
SpriteSheet runningSS = new SpriteSheet("/path/to/sprite.png", 24, 32);
Animation runningAnimation = new Animation(runningSS, new int[]{0,0,1,0,2,0}, new int[]{100,100,100});

This example is for slick build 274

Jul 022012
 

Run Maven with Ant

If you have the option to remove Ant from your projects its probably easier to just use maven for most of the build process, but sometimes it requires too much work and time, so this is a quick solution to have your Ant script run maven.

<exec executable="cmd">
<arg value="/c" />
<arg value="mvn package -e -f path/to/pom.xml " />
</exec>

Maven command to skip tests

-Dmaven.test.skip=true

Jul 022012
 

Deploy Snapshot or release jar to Local Maven Repository

In Settings.xml

<settings>
<servers>
<server>
<id>releases</id>
<username>username</username>
<password>password</password>
</server>
</servers>
</settings>

In pom.xml

<distributionManagement>
<repository>
<id>releases</id>
<url>http://server/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://server/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>

Jul 012012
 

The following maven xml will retrieve all the maven dependencies and copy them to the target/lib folder.

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>target/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>

Jul 012012
 

Add external jars to runnable jar MANIFEST.MF file using maven

Also package project as a runnable jar with the specified main class

<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifestEntries>
<Class-Path>lib/pojoxml-1.0.jar lib/lwjgl.jar lib/jorbis-0.0.15.jar lib/jogg-0.0.7.jar lib/natives-win32.jar lib/slick.jar</Class-Path>
</manifestEntries>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib</classpathPrefix>
<mainClass>com.porto.game.game2d.GameMain</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>

Jul 012012
 


<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>target/lib</outputDirectory>
<resources>
<resource>
<directory>lib</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>

If filtering is set to true, Maven will parse the file using the encoding and rewrite it, I have found that his can cause all sorts of issues including class not found errors.

Jun 052012
 

I have updated the level collision detection code to support two images, one image (bottom) that is actually rendered to make up the level, and the second image (top) that tells the collision block creation code what type of collidable object to make.
In this case, anything transparent is non-collidable, anything black is solid and can’t be destroyed and anything red is collidable and can be destroyed.

 

Jun 052012
 

So I have been playing around with game development for a while. First I had alot of trouble picking a game engine and a language. For a while, I was doing alot of webdesign with PHP and mySQL, which isn’t very similar to game development. Now I am currently working as a J2EE developer ( JAVA and JSPs). I first started out playing around with Unity Game Engine which is very nice, but I’m the type of person that likes to know how everything works. Unity does a great job at allowing you to focus on the game and its content rather then the engine and architecture of how the game works. I then decided that I would use jMonkey Engine and create a 3d space shooter type game. This was going well, but I felt I was spending more time tweaking physics settings and 3D modeling then actually coding the game.

Recently I decided I would give Slick2d ( http://slick.cokeandcode.com/ ) a try.

I am currently working on multiple aspects of this game, but the initial development was on creating levels. Slick2D supports levels created out of tiles that you can easily create with third party tools, but this only allows for very rigid levels. I decided that I wanted something more flexible. I finally decided that I wanted to be able to import a png image with transparent background. Anything opaque would be mapped as solid for the collision system. Below is the initial result.