實如今SurfaceView上移動遊戲人物

 

 

 

首先給你們介紹一個RPG素材網站java

http://www.66rpg.com/ android

這幾天一直在搗鼓這個canvas

有不少遊戲人物圖片數組

能夠用來實現人物動畫ide

 

 

遊戲畫面以下圖動畫

 
 
代碼以下
只實現了移動人物,對碰撞之類的尚未實現。
 
package com.example.gamethree;

import android.view.KeyEvent;
import android.view.SurfaceView;
import android.view.SurfaceHolder;
import android.view.View;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Bitmap;
import android.graphics.Color;


public class EightOne extends SurfaceView implements SurfaceHolder.Callback,Runnable{

	private Canvas canvas;
	private Bitmap background;

	private Thread thread;
	private SurfaceHolder holder;

	public int l_id=0;
	public int r_id=0;
	public int u_id=0;
	public int d_id=0;
	
	//人物位置座標
	int curX=0;
	int curY=0;
	int Code;

	
	//獲取人物朝右的圖片ID
	int[] r_pic_id={R.drawable.right_a,
			R.drawable.right_b,
			R.drawable.right_a,
			R.drawable.right_d
	};

	//獲取人物朝左的圖片ID
	int[] l_pic_id={R.drawable.left_a,
			R.drawable.left_b,
			R.drawable.left_c,
			R.drawable.left_d,
	};

	//獲取人物朝上的圖片ID
	int[] u_pic_id={R.drawable.up_a,
			R.drawable.up_b,
			R.drawable.up_a,
			R.drawable.up_d
	};

	//獲取人物朝下的圖片ID
	int[] d_pic_id={R.drawable.down_a,
			R.drawable.down_b,
			R.drawable.down_c,
			R.drawable.down_d,
	};


	//獲取對應圖片ID的Bitmap數組
	Bitmap[] r_pic=new Bitmap[4];
	Bitmap[] l_pic=new Bitmap[4];
	Bitmap[] u_pic=new Bitmap[4];
	Bitmap[] d_pic=new Bitmap[4];

	public EightOne(Context content)
	{
		super(content);	
		holder=getHolder();
		holder.addCallback(this);
		background=BitmapFactory.decodeResource(getResources(), R.drawable.background1);

		//加載圖片資源
		maps();	

		thread=new Thread(this);	

		//這個必定要有,不然沒法監聽到鍵盤事件
		setFocusable(true);

		
		setOnKeyListener(new OnKeyListener(){
			public boolean onKey(View v,int keyCode,KeyEvent event)
			{

				Code=keyCode;
				if(event.getAction()==KeyEvent.ACTION_DOWN)
				{
					switch(keyCode)
					{
					case KeyEvent.KEYCODE_DPAD_RIGHT:
						if(r_id>2)
							r_id=0;
						r_id++;
						curX+=4;	
						break;
					case KeyEvent.KEYCODE_DPAD_LEFT:
						if(l_id>2)
							l_id=0;
						l_id++;
						curX-=4;								
						break;
					case KeyEvent.KEYCODE_DPAD_UP:
						if(u_id>2)
							u_id=0;
						u_id++;
						curY-=4;										
						break;
					case KeyEvent.KEYCODE_DPAD_DOWN:
						if(d_id>2)
							d_id=0;
						d_id++;
						curY+=4;							
						break;	
					}			
				}
				else
				{
					l_id=0;
					r_id=0;
					u_id=0;
					d_id=2;
				}
				return true;
			}	
		});



	}

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

	}
	@Override
	public void surfaceCreated(SurfaceHolder holder)
	{
		//啓動一條線程
		thread.start();	
	}
	@Override
	public void surfaceDestroyed(SurfaceHolder holder)
	{

	}

	//分別加載人物在左、右、上、下四個方面的資源
	public void maps(){
		for(int i=0;i<r_pic_id.length;i++)
		{
			r_pic[i]=BitmapFactory.decodeResource(getResources(), r_pic_id[i]);	
			l_pic[i]=BitmapFactory.decodeResource(getResources(), l_pic_id[i]);	
			u_pic[i]=BitmapFactory.decodeResource(getResources(), u_pic_id[i]);	
			d_pic[i]=BitmapFactory.decodeResource(getResources(), d_pic_id[i]);	
		}
	}


	@Override
	public void run()
	{
		while(true)
		{
			try{
				synchronized(holder)
				{
					
					//調用自定義的繪畫方法
					canvas=holder.lockCanvas();
					myDraw();
					holder.unlockCanvasAndPost(canvas);		
				}
			}
			catch(Exception e)
			{

			}
			try{
				Thread.sleep(100);
			}
			catch(Exception e)
			{

			}	
		}
	}
	
	//自定義一個繪畫方法
	public void myDraw(){

		canvas.drawColor(Color.BLACK);
		canvas.drawBitmap(background,0,0,null);

		if(Code==KeyEvent.KEYCODE_DPAD_RIGHT)
			canvas.drawBitmap(r_pic[r_id],curX,curY,null);

		else if(Code==KeyEvent.KEYCODE_DPAD_LEFT)
			canvas.drawBitmap(l_pic[l_id],curX,curY,null);

		else if(Code==KeyEvent.KEYCODE_DPAD_UP)
			canvas.drawBitmap(u_pic[u_id],curX,curY,null);

		else
			canvas.drawBitmap(d_pic[d_id],curX,curY,null);

	}
}
相關文章
相關標籤/搜索