实例8--《小鸡快跑》,原书用的是java me 提供的sprite,我使用的我自己写的androidSprite。没什么好说的,很幼稚,但是还是要发,我要实现自己的承诺。下面给出效果图:


mainView.java
package com.wjh.demon_7;
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.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
public class MainView extends SurfaceView implements Callback,Runnable{
Thread gameThread = null;
boolean isGame = true;
SurfaceHolder holder = null;
//具体游戏相关
public AndroidSprite m_CockSprite; //小鸡精灵
public Bitmap m_BackImg; //背景图像
//画笔
public Paint backPaint = null;
public Paint forePaint = null;
public MainView(Context context) {
super(context);
// TODO Auto-generated constructor stub
setFocusable(true);
getHolder().addCallback(this);
holder = this.getHolder();
// 具体游戏相关代码
m_BackImg = BitmapFactory.decodeResource(getResources(), R.drawable.back);
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.cock);
//创建小鸡精灵
m_CockSprite = new AndroidSprite( image, 95, 85 );
//设置精灵当前显示的“帧”编号
m_CockSprite.setFrame( 0 );
}
@Override
public void run() {
// TODO Auto-generated method stub
while(isGame)
{
input();
logic();
doDraw();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//开始游戏主线程
public void start()
{
//getWidth与getHeight可分别获取屏幕的宽度和高度
int nPosX = getWidth();
int nPosY = getHeight() - 90;
//设置精灵左上角的位置
m_CockSprite.setPosition( nPosX , nPosY );
// 新建画笔
backPaint = new Paint();
backPaint.setColor(Color.BLACK);
forePaint = new Paint();
forePaint.setColor(Color.WHITE);
m_BackImg = Bitmap.createScaledBitmap(m_BackImg, getWidth(),getHeight(), false);
if(gameThread == null)
{
gameThread = new Thread(this);
gameThread.start();
}
}
//停止游戏主线程
public void stop()
{
isGame = false;
if(gameThread != null)
{
try {
gameThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//输入判断
public void input()
{
}
//逻辑判断
public void logic()
{
int n = m_CockSprite.getFrame();
n ++;
//getFrameSequenceLength可获取精灵图像中“帧”的个数
if( n >= m_CockSprite.getFrameSequenceLength() )
n = 0;
m_CockSprite.setFrame(n);
//设置精灵的位置,如果精灵超出屏幕左侧,则让精灵从右侧重新出现
int nPosX = m_CockSprite.getX();
int nPosY = m_CockSprite.getY();
nPosX -= 6;
if( nPosX < -95 )
nPosX = getWidth();
m_CockSprite.setPosition( nPosX, nPosY );
}
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);
canvas.drawBitmap(m_BackImg, 0, 0,forePaint);
//显示精灵的当前“帧”
m_CockSprite.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();
}
}
apk文件(将后缀改为apk):Demon_7.zip
源代码:Demon_7.rar

- 大小: 54.2 KB

- 大小: 54.2 KB
分享到:
相关推荐
微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台...
axure-常用图标-实例 axure-常用图标-实例 axure-常用图标-实例 axure-常用图标-实例 axure-常用图标-实例 axure-常用图标-实例 axure-常用图标-实例 axure-常用图标-实例 axure-常用图标-实例 axure-常用图标-实例 ...
FLUENT工程技术与实例分析--周俊杰(上)
《MATLAB-SIMULINK建模与仿真实例精讲》是张德丰撰写的一本专业书籍,专注于介绍如何使用MATLAB的SIMULINK工具进行系统建模与仿真。MATLAB是一款广泛应用于科学计算、数据分析和工程应用的高级编程语言,而SIMULINK...
安卓冒险游戏源码可直接运行类似于精灵快跑这种可做毕业设计 安卓飞机游戏 完美版的Android 拼图游戏APK和工程源码 猜拳游戏 用的libgdx引擎写的ACE 弹幕射击游戏设计与开发 类似冰雪奇缘一类的三消游戏,用quick-x...
这份资源是一份针对深度学习计算机视觉领域的实例分割源码,使用 Ultralytics YOLOv8-seg 模型和 COCO128-seg 数据集进行目标检测和实例分割任务。提供了一个亲身测试且直接可运行的实例分割解决方案。 数据集我已经...
VS2022_MFC编程入门之二十三(常用控件:按钮控件的编程实例)-软件开发-鸡啄米终稿.pdf
(思科,华为)路由器配置实例--各100例.rar
实例2-8:计算学生平均成绩。源代码在光盘中“\02\eighthcpp”目录下。 实例2-9:函数的调用。源代码在光盘中“\02\ninthcpp”目录下。 实例2-10:用指针传递参数。源代码在光盘中“\02\tenthcpp”目录下。 实例2-11...
FLUENT工程技术与实例分析--周俊杰(下)--(共有上下两部分).pdf
### C++项目实例——仓库管理系统的关键知识点 #### 一、项目背景与意义 - **项目背景**:在商业环境中,有效的物资管理对于企业的成功至关重要。随着业务规模的扩大,传统的人工管理方式变得愈发难以应对复杂的...
8-8位LED左移(51单片机C语言实例Proteus仿真和代码)8-8位LED左移(51单片机C语言实例Proteus仿真和代码)8-8位LED左移(51单片机C语言实例Proteus仿真和代码)8-8位LED左移(51单片机C语言实例Proteus仿真和代码)8-8位LED...
FEKO 5.4 电磁场分析技术与实例详解-2009
VS2022_MFC编程入门之二十三(常用控件:按钮控件的编程实例)-软件开发-鸡啄米归类.pdf
VS202x_MFC编程入门之二十三(常用控件:按钮控件的编程实例)-软件开发-鸡啄米.pdf
AutoCAD VBA开发精彩实例教程-清华大学-张帆
labview工程实例 labview工程实例labview工程实例labview工程实例labview工程实例labview工程实例labview工程实例labview工程实例labview工程实例labview工程实例labview工程实例
matlab机构运动仿真simulink实例--四连杆机构
MATLAB-SIMULINK建模与仿真实例精讲-张德丰(pdf),很好的学习资料,分享给大家
在这个“Android应用小实例--炫酷计时器”中,我们将深入探讨如何在Android应用中创建并定制一个功能丰富的计时器。 计时器组件在Android SDK中是`android.widget.Chronometer`类,它类似于一个倒计时定时器,但...