六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 34|回复: 0

实例10--不搭的跳舞机

[复制链接]

升级  42%

31

主题

31

主题

31

主题

秀才

Rank: 2

积分
113
 楼主| 发表于 2013-1-26 13:31:39 | 显示全部楼层 |阅读模式
  还是要重申一遍,因为只是转化,所以原j2me的问题,我不会进行修改。所以这个游戏还是那个样,各种不搭,非常不搭。。。因为实例需要,我在AndroidSprite中添加了几个方法,也修改paint方法.在转化过程中,遇到了最大的难点是matrix 的使用,他用在图片的翻转上。下面给出效果图,和源码.




 MainView
 
package com.wjh.demon_9;import com.wjh.midp_me.AndroidSprite;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.media.MediaPlayer;import android.util.Log;import android.view.KeyEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.SurfaceHolder.Callback;public class MainView extends SurfaceView implements Callback,Runnable{int keyCode = 0;String keyAction = "";Thread gameThread = null;boolean isGame = true;SurfaceHolder holder = null;public AndroidSprite m_spDancer;                 //管理MM精灵public ArrowSprite m_aArr_S[];            //管理静态箭头public ArrowSprite m_aArr_M[];            //管理动态箭头public int m_aSteps[] = {                 //存储舞步1, 0, 2, 3, 1, 0, 1, 3, 0, 1, 2, 3, 3, 1, 1, 2, 1, 2, 1, 0, 1, 2, 1, 1,0, 0, 1, 3, 0, 0, 2, 2, 1, 1, 2, 2,1, 0, 2, 1, 3, 3, 0, 3, 0, 0, 2, 0 };public int m_nStep = 0;       //下一个舞步在m_aSteps中的索引MediaPlayer m_Player;  Paint backPaint = null;Paint forePaint = null;public MainView(Context context) {super(context);// TODO Auto-generated constructor stubsetFocusable(true);getHolder().addCallback(this);holder = this.getHolder();//读取MM精灵图片,设置MM精灵的参考点及位置Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.dancer);m_spDancer = new AndroidSprite( image, 61, 80 );//读取箭头图片,创建两种箭头数组Bitmap image2 = BitmapFactory.decodeResource(getResources(), R.drawable.arrow);m_aArr_S = new ArrowSprite[4];for( int n = 0; n < m_aArr_S.length; n ++ ){m_aArr_S[n] = new ArrowSprite( image2, 15, 15 );m_aArr_S[n].StartStatic( 15 + n * 20, 30, n );}m_aArr_M = new ArrowSprite[6];    //最多同时显示6个动态箭头for( int n = 0; n < m_aArr_M.length; n ++ ){m_aArr_M[n] = new ArrowSprite( image2, 15, 15 );}m_Player = MediaPlayer.create(context, R.raw.music);m_Player.setLooping(true);m_Player.start();backPaint = new Paint();backPaint.setColor(Color.BLACK);forePaint = new Paint();}@Overridepublic void run() {//获取系统当前时间,并将时间换算成以毫秒为单位的数long T1 = System.currentTimeMillis();long T2 = T1;while(isGame){T2 = System.currentTimeMillis();if( T2 - T1 > 100 ){    //间隔100毫秒T1 = T2;input();logic();doDraw();}}}//开始游戏主线程public void start(){m_spDancer.defineReferencePixel( 30, 40 );m_spDancer.setRefPixelPosition(getWidth() - 50, getHeight()/2);if(gameThread == null){gameThread = new Thread(this);gameThread.start();}}//停止游戏主线程public void stop(){isGame = false;if(gameThread != null){try {gameThread.join();this.m_Player.stop();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//输入判断public void input(){m_spDancer.setFrame( 0 );//如果按下方向键的上键,MM向上跳舞if( keyCode == KeyEvent.KEYCODE_DPAD_UP)m_spDancer.setFrame( 1 );//如果按下方向键的下键,MM向下跳舞if(  keyCode == KeyEvent.KEYCODE_DPAD_DOWN )m_spDancer.setFrame( 2 );//如果按下方向键的左键,MM向左跳舞if(  keyCode == KeyEvent.KEYCODE_DPAD_LEFT)m_spDancer.setFrame( 3 );//如果按下方向键的右键,MM向右跳舞if( keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)m_spDancer.setFrame( 4 );keyCode = -1;}public long m_LogicT1 = System.currentTimeMillis();//逻辑判断public void logic(){for( int n = 0; n < m_aArr_M.length; n ++ )m_aArr_M[n].Logic();long mT2 = System.currentTimeMillis();if( mT2 - m_LogicT1 > 1500 ){m_LogicT1 = mT2;for( int n = 0; n < m_aArr_M.length; n ++ ){if( m_aArr_M[n].isVisible() == false ){m_aArr_M[n].StartMove( 15 + m_aSteps[n] * 20, 110, 30, 1, m_aSteps[n] );break;}}m_nStep ++;if( m_nStep > m_aSteps.length )m_nStep = 0;}}public void doDraw(){Canvas c = null;try{c = holder.lockCanvas();synchronized (holder) {paint(c);}}finally{if(c != null){holder.unlockCanvasAndPost(c);}}}//画图public void paint(Canvas canvas){//用黑色清屏canvas.drawRect(0, 0, getWidth(), getHeight(), backPaint);//显示MM及所有箭头图像m_spDancer.paint(canvas,forePaint);for( int n = 0; n < m_aArr_S.length; n ++ ){m_aArr_S[n].paint(canvas,forePaint);}for( int n = 0; n < m_aArr_M.length; n ++ ){m_aArr_M[n].paint(canvas,forePaint);}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubstart();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubstop();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubthis.keyCode = keyCode;return true;}} apk文件(将后缀改为apk):Demon_9.zip
源代码:Demon_9.rar
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表