还是要重申一遍,因为只是转化,所以原j2me的问题,我不会进行修改。所以这个游戏还是那个样,各种不搭,非常不搭。。。因为实例需要,我在AndroidSprite中添加了几个方法,也修改paint方法.在转化过程中,遇到了最大的难点是matrix 的使用,他用在图片的翻转上。下面给出效果图,和源码.

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 stub

setFocusable(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();

}

@Override

public 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 block

e.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);

}

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// TODO Auto-generated method stub

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

// TODO Auto-generated method stub

start();

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

// TODO Auto-generated method stub

stop();

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

this.keyCode = keyCode;

return true;

}

}

Android源码--不搭的跳舞机相关推荐

  1. [Android Pro] Android源码编译之Nexus5真机编译

    reference to : http://blog.csdn.net/liu1075538266/article/details/51272398 1.   前言 在Android安全的研究工作中, ...

  2. Android源码编译之Nexus5真机编译

    1.   前言 在Android安全的研究工作中,我们时常要对Android进行改进并对其进行源码编译,由于目前几乎所有的手机厂商均对其底层驱动实行封闭政策,导致我们在完成Android编译后无法将我 ...

  3. Android 源码编译及真机刷机实录

    最近接到一个项目,需要接触 Android 源码,所以走了一遍源码编译和刷机的过程,从开始到成功花了差不多一周的时间,踩了很多坑,在此记录一下. 整体分为四个部分: 文章目录 1.环境配置 1.1 创 ...

  4. 编译android源码刷机到Nexus5x

    基础环境 1.系统:ubuntu16.04 2.安卓版本: android-8.1.0_r1 3.openjdk: 1.8 4.python版本: 2.7(系统默认) 1.设置ubuntu镜像源 /e ...

  5. Android 源码刷机版本号、支持设备对照表(AOSP )

    Android 源码刷机版本号.支持设备对照表(AOSP ) Android 官方地址:https://source.android.com/setup/start/build-numbers#sou ...

  6. 对google手机编译android源码刷机

    一.简介 最近因为修改系统源码层某功能的代码,对多个版本的系统源码进行了编译,并刷到手机中.如果是单纯研究Android源码或Android手机系统层的某个功能,以google原生Android手机和 ...

  7. Android源码的下载,编译,刷机

    上篇说到<framework开发环境搭建>,本篇继续介绍Android源码的下载.编译.刷机 先贴上Android源码官网地址:https://source.android.com/doc ...

  8. 记一次 Android 源码编译刷机过程

    0 背景   为了能在开发设备上运行 adb root 命令得到 root 权限,获得更加强大的调试能力.开发体验,方便以后阅读源码时 Debug 跟踪.进行定制化开发,需要编译 Android 源码 ...

  9. 徒手搭建编译环境,编译Android源码--手把手,嘴对嘴版本

    作为有点点小追求的Android Developer,应该都需要拥有一套自己的Android源码吧,一方面方便自己对源码的理解,另一方面也方便自己验证自己的很多猜想.本文主要记录一下源码从下载到编译成 ...

  10. android源码编译 简书,android学习笔记之源码编译

    编译环境 1.需要Ubuntu 64bit,建议Ubuntu14.04 64-bit 2.安装openJDK7 $ sudo apt-get update $ sudo apt-get install ...

最新文章

  1. MXNet动手学深度学习笔记:卷积计算
  2. 由巨型计算机到微型计算机,微机原理第一章节:基础知识.ppt
  3. 传统I/O 数据拷贝
  4. Linux笔记-利用chkconfig创建脚本使得Rabbimq开机自启
  5. verilog实现汉明权重_(学习Verilog)6. FIR IP核的基础功能使用总结
  6. POI读取单元格信息及单元格公式
  7. 我的Python成长之路---第三天---Python基础(13)---2016年1月16日(雾霾)
  8. 线性规划的标准型与规范型 (Standard and Canonical Forms)
  9. js生成带log的二维码(qrcodejs)
  10. 直流电机调速仿真作业
  11. 从零做一个小程序(计算器)赚钱
  12. ubuntu终端快速清空回收站
  13. 打印服务器的打印机显示端口错误,使用标准 TCP/IP 端口时,2335DN 打印机可能会错误地显示为离线...
  14. 用计算机解决小学数学问题,小学数学学习中存在的问题和解决策略
  15. Nordic新发布nRF21540与RFX2401C和CC2592性能对比
  16. 自动控制原理(1)- 介绍与数学模型
  17. Gan(生成式对抗网络)
  18. 第三方登陆——QQ登陆详解
  19. python:性能优化(一)
  20. 【CBIR】【Color】颜色矩(Color Moment)1

热门文章

  1. 阿里巴巴总裁马云语录
  2. java装饰模式实例解析
  3. 大数据系统发展的技术路线
  4. 不动点求数列通项原理_不动点法求数列的通项.pdf
  5. Light absorption(光吸收)
  6. 论文要点总结:Gradient-Based Learning Applied to Document Recognition(一)
  7. 【物理应用】基于Matlab模拟杨氏双孔干涉实验
  8. 深入理解卷积神经网络 VGG16
  9. Northwind 和 pubs 示例数据库下载
  10. 智慧园区整体建设规划设计方案(附PPT)