This page is optimized for mobile devices, if you would prefer the desktop version just click here

0.11 Slick0210: collision detection and sound  (Page 4/8)

An object of the Sound class

The only thing new in Listing 2 is the instantiation of the object of type Sound . As you can see, the syntax for instantiation of a Sound object is essentially the same as for instantiating an Image object.

Add a red sprite

Listing 3 calls the add method of the ArrayList class to add a red sprite to the beginning of the ArrayList object. (Actually it add a reference to that object and not the object itself.)

You are already familiar with the constructor parameters (shown in Listing 3 ) for a Sprite01 object.

Listing 3 . Add a red sprite to the ArrayList object.
sprites.add(new Sprite01( redBallImage,//imagebackgroundWidth/2.0f,//initial position backgroundHeight/2.0f,//initial position(random.nextFloat()>0.5) ? 1f : -1f,//direction (random.nextFloat()>0.5) ? 1f : -1f,//direction 0.1f+random.nextFloat()*2.0f,//step size0.1f+random.nextFloat()*2.0f,//step size 0.5f+random.nextFloat()*1.5f,//scalenew Color(1.0f,1.0f,1.0f)));//color filter

Populate the ArrayList object

Listing 4 uses a for loop and the value of the variable named numberSprites (see Listing 1 ) to add 1000 green Sprite01 object references to the ArrayList object.

Listing 4 . Populate the ArrayList object.
for(int cnt = 0;cnt<numberSprites;cnt++){ sprites.add(new Sprite01(greenBallImage,//image backgroundWidth*random.nextFloat(),//positionbackgroundHeight*random.nextFloat(),//position (random.nextFloat()>0.5) ? 1f : -1f,//direction (random.nextFloat()>0.5) ? 1f : -1f,//direction 0.1f+random.nextFloat()*2.0f,//step size0.1f+random.nextFloat()*2.0f,//step size random.nextFloat()*1.0f,//scalenew Color(1.0f,1.0f,1.0f)));//color filter }//end for loopgc.setTargetFrameRate(targetFPS);//set frame rate }//end init

Listing 4 also sets the target frame rate and signals the end of the init method.

The update method

The overall behavior of the update method is to use a for loop to process the red sprite against each of the green sprites and to take appropriate actions when a collision between the red sprite and agreen sprite occurs.

The update method begins in Listing 5 .

Listing 5 . Beginning of the update method.
public void update(GameContainer gc, int delta) throws SlickException{//Access to the first sprite in the ArrayList object. Sprite01 redBallSprite = sprites.get(0);//Do the following for every sprite in the ArrayList // objectfor(int cnt = 0;cnt<sprites.size();cnt++){ //Get a reference to the Sprite01 object.Sprite01 thisSprite = sprites.get(cnt);//Ask the sprite to move according to its properties thisSprite.move();//Ask the sprite to bounce off the edge if it is at // an edge.thisSprite.edgeBounce( backgroundWidth,backgroundHeight);

Mostly same as before

The code in Listing 5 is mostly the same as code that you have seen before, so further explanation should not be necessary.

Test for a collision

The code in Listing 6 is new to this module. This code calls the isCollision method of the Sprite01 class to test for a collision between the current green sprite and the red sprite.

<< Chapter < Page Page > Chapter >>

Read also:

OpenStax, Anatomy of a game engine. OpenStax CNX. Feb 07, 2013 Download for free at https://legacy.cnx.org/content/col11489/1.13
Google Play and the Google Play logo are trademarks of Google Inc.
Jobilize.com uses cookies to ensure that you get the best experience. By continuing to use Jobilize.com web-site, you agree to the Terms of Use and Privacy Policy.