Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> Android源碼--不搭的跳舞機

Android源碼--不搭的跳舞機

編輯:初級開發

還是要重申一遍,因為只是轉化,所以原J2ME的問題,我不會進行修改。所以這個游戲還是那個樣,各種不搭,非常不搭。。。因為實例需要,我在androidSprite中添加了幾個方法,也修改paint方法.在轉化過程中,遇到了最大的難點是matrix 的使用,他用在圖片的翻轉上。下面給出效果圖,和源碼.

 1.JPG

2.JPG

 

  1. package com.wjh.demon_9;
     

  2.  
  3. import com.wjh.midp_me.androidSprite;
     

  4.  
  5. import android.content.Context;
     
  6. import android.graphics.Bitmap;
     
  7. import android.graphics.BitmapFactory;
     
  8. import android.graphics.Canvas;
     
  9. import android.graphics.Color;
     
  10. import android.graphics.Paint;
     
  11. import android.media.MediaPlayer;
     
  12. import android.util.Log;
     
  13. import android.vIEw.KeyEvent;
     
  14. import android.vIEw.SurfaceHolder;
     
  15. import android.view.SurfaceVIEw;
     
  16. import android.vIEw.SurfaceHolder.Callback;
     

  17.  
  18. public class MainView extends SurfaceVIEw implements Callback,Runnable{
     
  19.         int keyCode = 0;
     
  20.         String keyAction = "";
     
  21.         Thread gameThread = null;
     
  22.         boolean isGame = true;
     
  23.         SurfaceHolder holder = null;
     
  24.         
     
  25.         public androidSprite m_spDancer;                 //管理MM精靈
     
  26.         public ArrowSprite m_aArr_S[];            //管理靜態箭頭
     
  27.         public ArrowSprite m_aArr_M[];            //管理動態箭頭
     
  28.         public int m_aSteps[] = {                 //存儲舞步
     
  29.                         1, 0, 2, 3, 1, 0, 1, 3, 0, 1, 2, 3, 
     
  30.                         3, 1, 1, 2, 1, 2, 1, 0, 1, 2, 1, 1,
     
  31.                         0, 0, 1, 3, 0, 0, 2, 2, 1, 1, 2, 2,
     
  32.                         1, 0, 2, 1, 3, 3, 0, 3, 0, 0, 2, 0 };
     
  33.         public int m_nStep = 0;       //下一個舞步在m_aSteps中的索引
     
  34.         MediaPlayer m_Player;  
     
  35.         
     
  36.         Paint backPaint = null;
     
  37.         Paint forePaint = null;
     
  38.         public MainVIEw(Context context) {
     
  39.                 super(context);
     
  40.                 // TODO Auto-generated constructor stub
     
  41.                 setFocusable(true);
     
  42.                 getHolder().addCallback(this);
     
  43.                 holder = this.getHolder();
     
  44.                         
     
  45.                         //讀取MM精靈圖片,設置MM精靈的參考點及位置
     
  46.                         Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.dancer);
     
  47.                         m_spDancer = new androidSprite( image, 61, 80 );
     
  48.                         
     
  49.                         
     
  50.                         //讀取箭頭圖片,創建兩種箭頭數組
     
  51.                         Bitmap image2 = BitmapFactory.decodeResource(getResources(), R.drawable.arrow);
     
  52.                         m_aArr_S = new ArrowSprite[4];
     
  53.                         for( int n = 0; n < m_aArr_S.length; n ++ ){
     
  54.                                 m_aArr_S[n] = new ArrowSprite( image2, 15, 15 );
     
  55.                                 m_aArr_S[n].StartStatic( 15 + n * 20, 30, n );
     
  56.                         }                        
     
  57.                         m_aArr_M = new ArrowSprite[6];    //最多同時顯示6個動態箭頭
     
  58.                         for( int n = 0; n < m_aArr_M.length; n ++ ){
     
  59.                                 m_aArr_M[n] = new ArrowSprite( image2, 15, 15 );
     
  60.                         }
     
  61.                                                 
     
  62.                         m_Player = MediaPlayer.create(context, R.raw.music);
     
  63.                         m_Player.setLooping(true);
     
  64.                         m_Player.start();
     
  65.                         
     
  66.                         backPaint = new Paint();
     
  67.                         backPaint.setColor(Color.BLACK);
     
  68.                         forePaint = new Paint();
     
  69.                 
     
  70.         }
     
  71.         @Override
     
  72.         public void run() {
     
  73.                 //獲取系統當前時間,並將時間換算成以毫秒為單位的數
     
  74.                 long T1 = System.currentTimeMillis();
     
  75.                 long T2 = T1;
     
  76.                 while(isGame){
     
  77.                         T2 = System.currentTimeMillis();
     
  78.                         if( T2 - T1 > 100 ){                            //間隔100毫秒
     
  79.                                 T1 = T2;
     
  80.                                 input();
     
  81.                                 logic();
     
  82.                                 doDraw();
     
  83.                         }
     
  84.                 }
     
  85.                 
     
  86.         }
     
  87.         //開始游戲主線程
     
  88.         public void start()
     
  89.         {
     
  90.                 m_spDancer.defineReferencePixel( 30, 40 );
     
  91.                 m_spDancer.setRefPixelPosition(getWidth() - 50, 
     
  92.                                                                                 getHeight()/2);
     
  93.                 if(gameThread == null)
     
  94.                 {
     
  95.                 gameThread = new Thread(this);
     
  96.                 gameThread.start();
     
  97.                 }
     
  98.         }
     
  99.         //停止游戲主線程
     
  100.         public void stop()
     
  101.         {
     
  102.                 isGame = false;
     
  103.                 if(gameThread != null)
     
  104.                 {
     
  105.                         try {
     
  106.                                 gameThread.join();
     
  107.                                 this.m_Player.stop();
     
  108.                         } catch (InterruptedException e) {
     
  109.                                 // TODO Auto-generated catch block
     
  110.                                 e.printStackTrace();
     
  111.                         }
     
  112.                 }
     
  113.         }
     
  114.         //輸入判斷
     
  115.         public void input()
     
  116.         {        
     

  117.  
  118.                 m_spDancer.setFrame( 0 );
     
  119.                 //如果按下方向鍵的上鍵,MM向上跳舞
     
  120.                 if( keyCode == KeyEvent.KEYCODE_DPAD_UP)
     
  121.                         m_spDancer.setFrame( 1 );
     

  122.  
  123.                 //如果按下方向鍵的下鍵,MM向下跳舞
     
  124.                 if(  keyCode == KeyEvent.KEYCODE_DPAD_DOWN )
     
  125.                         m_spDancer.setFrame( 2 );
     
  126.                 
     
  127.                 //如果按下方向鍵的左鍵,MM向左跳舞
     
  128.                 if(  keyCode == KeyEvent.KEYCODE_DPAD_LEFT)
     
  129.                         m_spDancer.setFrame( 3 );
     

  130.  
  131.                 //如果按下方向鍵的右鍵,MM向右跳舞
     
  132.                 if( keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)
     
  133.                         m_spDancer.setFrame( 4 );
     
  134.                 
     
  135.                 keyCode = -1;
     
  136.         }
     
  137.         public long m_LogicT1 = System.currentTimeMillis();
     
  138.         //邏輯判斷
     
  139.         public void logic()
     
  140.         {
     
  141.                 for( int n = 0; n < m_aArr_M.length; n ++ )
     
  142.                         m_aArr_M[n].Logic();
     
  143.                 
     
  144.                 long mT2 = System.currentTimeMillis();
     
  145.                 if( mT2 - m_LogicT1 > 1500 ){
     
  146.                         m_LogicT1 = mT2;
     
  147.                         for( int n = 0; n < m_aArr_M.length; n ++ ){
     
  148.                                 if( m_aArr_M[n].isVisible() == false ){
     
  149.                                         m_aArr_M[n].StartMove( 15 + m_aSteps[n] * 20, 
     
  150.                                                         110, 30, 1, m_aSteps[n] );
     
  151.                                         break;
     
  152.                                 }
     
  153.                         }
     
  154.                         m_nStep ++;
     
  155.                         if( m_nStep > m_aSteps.length )
     
  156.                                 m_nStep = 0;
     
  157.                 }
     
  158.         }
     
  159.         public void doDraw()
     
  160.         {
     
  161.                 Canvas c = null;
     
  162.                 try
     
  163.                 {
     
  164.                 c = holder.lockCanvas();
     
  165.                 synchronized (holder) {
     
  166.                         paint(c);
     
  167.                 }
     
  168.                 }finally{
     
  169.                         if(c != null)
     
  170.                         {
     
  171.                         holder.unlockCanvasAndPost(c);
     
  172.                         }
     
  173.                 }
     
  174.         }
     
  175.         //畫圖
     
  176.         public void paint(Canvas canvas)
     
  177.         {
     
  178.                 //用黑色清屏
     
  179.                 canvas.drawRect(0, 0, getWidth(), getHeight(), backPaint);
     
  180.                 //顯示MM及所有箭頭圖像
     
  181.                 m_spDancer.paint(canvas,forePaint);
     
  182.                 for( int n = 0; n < m_aArr_S.length; n ++ ){
     
  183.                         m_aArr_S[n].paint(canvas,forePaint);
     
  184.                 }
     
  185.                 for( int n = 0; n < m_aArr_M.length; n ++ ){
     
  186.                         m_aArr_M[n].paint(canvas,forePaint);
     
  187.                 }
     
  188.         }
     
  189.         @Override
     
  190.         public void surfaceChanged(SurfaceHolder holder, int format, int width,
     
  191.                         int height) {
     
  192.                 // TODO Auto-generated method stub
     
  193.                 
     
  194.         }
     
  195.         @Override
     
  196.         public void surfaceCreated(SurfaceHolder holder) {
     
  197.                 // TODO Auto-generated method stub
     
  198.                 start();
     
  199.                 
     
  200.         }
     
  201.         @Override
     
  202.         public void surfaceDestroyed(SurfaceHolder holder) {
     
  203.                 // TODO Auto-generated method stub
     
  204.                 stop();
     
  205.                 
     
  206.         }
     
  207.         @Override
     
  208.         public boolean onKeyDown(int keyCode, KeyEvent event) {
     
  209.                 // TODO Auto-generated method stub
     
  210.                 this.keyCode = keyCode;
     
  211.                 return true;
     
  212.         }
     
  213.         
     

  214.  
  215. }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved