首先給你們介紹一個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); } }