Archive for the ‘Android Game Programming’ Category

Move The Apple on TouchEvent

December 2nd, 2011 by admin | 1 Comment | Filed in Android Game Programming, Android Tutorials

The most important technical points you are going to learn are :
SurfaceView : The SurfaceView punches a hole in its window to allow its surface to be displayed.
getHolder(): By calling getHolder()we can access to the underlying surface
surfaceCreated(SurfaceHolder): Gives an idea of when the Surface is created.
surfaceDestroyed(SurfaceHolder):Gives an idea of when the Surface is destroyed
SurfaceHolder.addCallback :The Callback is set with SurfaceHolder.addCallback method

Step 1. Create a new android motodev project.

1

Step 2 : Put a apple.png in your res/drwable folder.
Step 3 : In your MainActivity class paste following codes :

			 package com.ballmovementontouch;

				 import android.app.Activity;
				 import android.os.Bundle;
				 import android.view.Window;

				 public class MainActivity extends Activity {
					 /** Called when the activity is first created. */
					 @Override
					 public void onCreate(Bundle savedInstanceState) {
						 super.onCreate(savedInstanceState);
						 requestWindowFeature(Window.FEATURE_NO_TITLE);
						 setContentView(new GameView(this));
					 }
				 }
				

Step 4: Create a new class GameView and paste following codes :

			package com.ballmovementontouch;

				import android.app.Activity;
				import android.content.Context;
				import android.graphics.BitmapFactory;
				import android.graphics.Canvas;
				import android.graphics.Color;
				import android.view.MotionEvent;
				import android.view.SurfaceHolder;
				import android.view.SurfaceView;

				public class GameView extends SurfaceView implements
					SurfaceHolder.Callback {
					private MainThread thread;
					private Apple appleInstance;

					public GameView(Context context) {
						super(context);
						getHolder().addCallback(this);
						appleInstance = new Apple(BitmapFactory.decodeResource(getResources(), R.drawable.apple), 50, 50);
						thread = new MainThread(getHolder(), this);
						setFocusable(true);
					}

					@Override
					public void surfaceChanged(SurfaceHolder holder, int format, int width,
						int height) {
						}

					@Override
					public void surfaceCreated(SurfaceHolder holder) {
						thread.setRunning(true);
						thread.start();
					}

					@Override
					public void surfaceDestroyed(SurfaceHolder holder) {
						boolean retry = true;
						while (retry) {
							try {
								thread.join();
								retry = false;
							} catch (InterruptedException e) {

							}
						}
					}

					@Override
					public boolean onTouchEvent(MotionEvent event) {
						if (event.getAction() == MotionEvent.ACTION_DOWN) {
							appleInstance.handleActionDown((int)event.getX(), (int)event.getY());
							if (event.getY() > getHeight() - 50) {
								thread.setRunning(false);
								((Activity)getContext()).finish();
							}
						} if (event.getAction() == MotionEvent.ACTION_MOVE) {
							if (appleInstance.isTouched()) {
								appleInstance.setX((int)event.getX());
								appleInstance.setY((int)event.getY());
							}
						} if (event.getAction() == MotionEvent.ACTION_UP) {
							if (appleInstance.isTouched()) {
								appleInstance.setTouched(false);
							}
						}
						return true;
					}

					@Override
					protected void onDraw(Canvas canvas) {
						canvas.drawColor(Color.BLACK);
						appleInstance.draw(canvas);
					}

				}
                

Step 5: Create an Apple Class and paste following code :

				   package com.ballmovementontouch;

					   import android.graphics.Bitmap;
					   import android.graphics.Canvas;

					   public class Apple {
						   private Bitmap bitmap;
						   private int x;
						   private int y;
						   private boolean touched;						   

						   public Apple(Bitmap bitmap, int x, int y) {
							   this.bitmap = bitmap;
							   this.x = x;
							   this.y = y;
						   }

						   public Bitmap getBitmap() {
							   return bitmap;
						   }
						   public void setBitmap(Bitmap bitmap) {
							   this.bitmap = bitmap;
						   }
						   public int getX() {
							   return x;
						   }
						   public void setX(int x) {
							   this.x = x;
						   }
						   public int getY() {
							   return y;
						   }
						   public void setY(int y) {
							   this.y = y;
						   }
						   public boolean isTouched() {
							   return touched;
						   }

						   public void setTouched(boolean touched) {
							   this.touched = touched;
						   }
						   public void draw(Canvas canvas) {
							   canvas.drawBitmap(bitmap, x - (bitmap.getWidth() / 2), y - (bitmap.getHeight() / 2), null);
						   }	   

						   public void handleActionDown(int eventX, int eventY) {
							   if (eventX >= (x - bitmap.getWidth() / 2) && (eventX <= (x + bitmap.getWidth()/2))) {
								   if (eventY >= (y - bitmap.getHeight() / 2) && (y <= (y + bitmap.getHeight() / 2))) {
									   setTouched(true);
								   } else {
									   setTouched(false);
								   }
							   } else {
								   setTouched(false);
							   }
						   }
					   }
                     

Step 6: Now Run your app and move the apple on touching it. It will look like this :
2

Tags: , , , , , , , ,

The Key movement for a particular object

November 30th, 2011 by admin | 2 Comments | Filed in Android Game Programming, Android Tutorials

Lets learn today how to handle the the Key movement for a particular object.
Here I have used a ball as object wich will move 10 px according to the key:

There are following steps :
1. Create a new motodev project ‘Ballmovement’.
New_Project

2. Your AndroidManifest.xml will look like this



    

    
        
            
                
                
            
        

    

3. Put the ball_1.png in your res/drwable folder

4. Now put following code in ManiActivity.java

package com.ballmovent;

import android.app.Activity;

import android.os.Bundle;

import android.view.Window;

public class MainActivity extends Activity {

   /** Called when the activity is first created. */

   @Override
    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(new GameView(this));

 }

}

5. Create a new class GameView.java. Now put following code in GameView.java


package com.ballmovent;

import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import com.ballmovent.ball;

public class GameView extends View {

      private ball ballInstance;
      public static final int UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3;

      public GameView(Context context) {
            super(context);
            ballInstance = new ball(BitmapFactory.decodeResource(context.getResources(),R.drawable.ball_1), 50, 50);
            setFocusable(true);
    		this.setFocusableInTouchMode(true);
      }

      @Override

      protected void onDraw(Canvas canvas) {
          canvas.drawColor(Color.BLACK);
          ballInstance.draw(canvas);
      }

      @Override
  	public boolean onKeyDown(int keyCode, KeyEvent evt) {
  		boolean moved = false;
  		Log.v("aks 1"+ moved, "index=" + 1);
  		switch(keyCode) {
  			case KeyEvent.KEYCODE_DPAD_UP:
  				moved = ballInstance.move(UP);
  				break;
  			case KeyEvent.KEYCODE_DPAD_DOWN:
  				moved = ballInstance.move(DOWN);
  				break;
  			case KeyEvent.KEYCODE_DPAD_RIGHT:
  				moved = ballInstance.move(RIGHT);
  				break;
  			case KeyEvent.KEYCODE_DPAD_LEFT:
  				moved = ballInstance.move(LEFT);
  				break;
  			default:
  				return super.onKeyDown(keyCode,evt);
  		}
  		if(moved) {
  			//the ball was moved so we'll redraw the view
  			ballInstance.setX((int)ballInstance.getX());
  			ballInstance.setY((int)ballInstance.getY());
  			invalidate();
  		}
  		return true;
  	}

}

7. Create a new class ball.java. Now put following code in ball.java for varous function etc

package com.ballmovent;

import android.graphics.Bitmap;
import android.graphics.Canvas;

public class ball {

	private Bitmap bitmap;
	private int x;
	private int y;
	public static final int UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3;

	public ball(Bitmap bitmap, int x, int y) {
		this.bitmap = bitmap;
		this.x = x;
		this.y = y;
	}

	public Bitmap getBitmap() {
		return bitmap;
	}
	public void setBitmap(Bitmap bitmap) {
		this.bitmap = bitmap;
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}

	public void draw(Canvas canvas) {
		canvas.drawBitmap(bitmap, x - (bitmap.getWidth() / 2), y - (bitmap.getHeight() / 2), null);
	}

	public boolean move(int direction) {
		boolean moved = false;
		if(direction == UP) {
				y -= 10;
				moved = true;
		}
		if(direction == DOWN) {
				y += 10;
				moved = true;
		}
		if(direction == RIGHT) {
				x += 10;
				moved = true;
		}
		if(direction == LEFT) {
				x -= 10;
				moved = true;
		}
		return moved;
	}

}

8. Run your application and check the movement of ball by pressing keys. Your app will look like this :

ball_movement_on_key

Tags: , , , , , , , , , , ,