<< Chapter < Page Chapter >> Page >

.

Listing 9 . Source code for Sprite01.
/*Sprite01.java Copyright 2013, R.G.BaldwinAn object of this class can be manipulated as a sprite in a Slick2D program.Tested using JDK 1.7 under WinXP *********************************************************/import org.newdawn.slick.AppGameContainer; import org.newdawn.slick.BasicGame;import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics;import org.newdawn.slick.Image; import org.newdawn.slick.SlickException;import org.newdawn.slick.Color; public class Sprite01{Image image = null;//The sprite wears this image float X = 0f;//X-Position of the spritefloat Y = 0f;//Y-Position of the sprite float width = 0f;//Width of the spritefloat height = 0f;//Height of the sprite float xStep = 1f;//Incremental step size in pixels - Xfloat yStep = 1f;//Incremental step size in pixels - Y float scale = 1f;//Scale factor for draw methodColor colorFilter = null;//Color filter for draw methodfloat xDirection = 1.0f;//Move to right for positive float yDirection = 1.0f;//Move down for positiveint life = 1;//Used to control life or death of spriteboolean exposed = false;//Used in the contagion program//Constructorpublic Sprite01(Image image,//Sprite wears this image float X,//Initial positionfloat Y,//Initial position float xDirection,//Initial directionfloat yDirection,//Initial direction float xStep,//Initial step sizefloat yStep,//Initial step size float scale,//Scale factor for drawingColor colorFilter) throws SlickException {//Save incoming parameter values this.image = image;this.X = X; this.Y = Y;this.xDirection = xDirection; this.yDirection = yDirection;this.xStep = xStep; this.yStep = yStep;this.scale = scale; this.colorFilter = colorFilter;//Compute and save width and height of imagewidth = image.getWidth(); height = image.getHeight();}//end constructor //----------------------------------------------------////The following accessor methods make many of the // important attributes accessible to the using// program. //----------------------------------------------------//public Image getImage(){ return image;}//end getSprite //----------------------------------------------------//public void setImage(Image image) throws SlickException{this.image = image; width = image.getWidth();height = image.getHeight(); }//end setImage//----------------------------------------------------//public float getWidth(){ return width;}//end getWidth //----------------------------------------------------//public float getHeight(){ return height;}//end getWidth //----------------------------------------------------//public float getX(){return X; }//end getX//----------------------------------------------------//public void setX(float X){ this.X = X;}//end setX //----------------------------------------------------//public float getY(){ return Y;}//end getY //----------------------------------------------------//public void setY(float Y){ this.Y = Y;}//end setY //----------------------------------------------------//public float getXDirection(){return xDirection; }// end getXDirection//----------------------------------------------------//public void setXDirection(float xDirection){ this.xDirection = xDirection;}//end setXDirection //----------------------------------------------------//public float getYDirection(){return yDirection; }//end getYDirection//----------------------------------------------------//public void setYDirection(float yDirection){ this.yDirection = yDirection;}//setYDirection //----------------------------------------------------//public float getXStep(){return xStep; }//end getXStep//----------------------------------------------------//public void setXStep(float xStep){ this.xStep = xStep;}//end setXStep //----------------------------------------------------//public float getYStep(){return yStep; }//end getYStep//----------------------------------------------------// public void setYStep(float yStep){this.yStep = yStep; }//end setYStep//----------------------------------------------------//public float getScale(){ return scale;}//end getScale //----------------------------------------------------//public void setScale(float scale){ this.scale = scale;}//end setScale //----------------------------------------------------//public Color getColorFilter(){return colorFilter; }//end getColorFilter//----------------------------------------------------//public void setColorFilter( float red,float green,float blue){colorFilter = new Color(red,green,blue); }//end setColorFilter//----------------------------------------------------//public int getLife(){ return life;}//end getLife //----------------------------------------------------//public void setLife(int life){this.life = life; }//end setLife//----------------------------------------------------//public boolean getExposed(){ return exposed;}//end getExposed //----------------------------------------------------//public void setExposed(boolean exposed){this.exposed = exposed; }//end setExposed//----------------------------------------------------////This method causes the sprite to be drawn each time // it is called.public void draw(){ image.draw(X,Y,scale,colorFilter);}//end draw //----------------------------------------------------////This method detects collisions between this// rectangular sprite object and another rectangular // sprite object by testing four cases where a// collision could not possibly occur and assuming that // a collision has occurred if none of those cases// are true. public boolean isCollision(Sprite01 other){//Create variable with meaningful names make the // algorithm easier to understand. Can be eliminated// to make the algorithm more efficient. float thisTop = Y;float thisBottom = thisTop + height*scale; float thisLeft = X;float thisRight = thisLeft + width*scale;float otherTop = other.getY(); float otherBottom = otherTop + other.getHeight()*other.getScale();float otherLeft = other.getX(); float otherRight = otherLeft + other.getWidth()*other.getScale();if (thisBottom<otherTop) return(false); if (thisTop>otherBottom) return(false);if (thisRight<otherLeft) return(false); if (thisLeft>otherRight) return(false);return(true); }//end isCollision//----------------------------------------------------//public void move(){ X += xDirection*xStep;Y += yDirection*yStep; }//end move//----------------------------------------------------//public void edgeBounce(float winWidth,float winHeight){ //Test for a collision with one of the edges and// cause to sprite to bounce off the edge if a // collision has occurred.if(X + width*scale>= winWidth){ //A collision has occurred.xDirection = -1.0f;//reverse direction //Set the position to the right edge less the// width of the sprite. X = winWidth - width*scale;}//end if//Continue testing for collisions with the edges // and take appropriate action.if(X<= 0){ xDirection = 1.0f;X = 0; }//end ifif(Y + height*scale>= winHeight){ yDirection = -1.0f;Y = winHeight - height*scale; }//end ifif(Y<= 0){ yDirection = 1.0f;Y = 0; }//end if}//end edgeBounce //----------------------------------------------------//}//end class Sprite01

-end-

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  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.

Notification Switch

Would you like to follow the 'Anatomy of a game engine' conversation and receive update notifications?

Ask