全部博文(436)
分类:
2011-04-20 22:12:19
第七次报告
研究题目:Android手机游戏开发
小组成员:李安 李想
本周计划:
欢迎界面的设计与实现。①主类KLSDActivity实现 ②欢迎界面WelcomeView类的实现 ③刷帧线程WelcomeViewDrawThread类的实现 ④动画生成线程WelcomeViewGoThread类的实现
游戏的架构
一. 主类KLSDActivity实现
该类是通过继承和扩展基类Activity来实现的,是整个程序的入口,主要是根据收到的Handler消息的不同切换到不同界面。
Handler myHandler = new Handler(){//用来更新UI线程中的控件
鉴于我们还没有开发其他类,若是写了代码会由于找不到那些类而报错,因此我们先构思好它的算法,等完成每一部分以后再书写这个主程序。
主类的开发步骤
二. 欢迎界面WelcomeView类的实现
WelcomeView类是本游戏的欢迎界面,主要负责欢迎界面的绘制。onDraw方法是该类中最重要的方法。
KLSDActivity activity;//activity的引用
WelcomeViewDrawThread welcomeViewDrawThread;//刷帧线程
WelcomeViewGoThread welcomeViewGoThread;//动画生成线程
*图片的ID,将其封装在一个数组里,方便进行管理,如下图:
int[] bitmapsID = new int[]{//图片ID
R.drawable.w1,R.drawable.w2,
R.drawable.w3,R.drawable.w4,
R.drawable.w5,R.drawable.w6,
R.drawable.w7,R.drawable.w8,
R.drawable.w9,R.drawable.w10,
R.drawable.w11,R.drawable.w12,
R.drawable.w13,R.drawable.w14,
R.drawable.w15,R.drawable.w16,
R.drawable.w17,R.drawable.w18,
R.drawable.w19,R.drawable.w20,
R.drawable.w21,R.drawable.w22,
R.drawable.w23,R.drawable.w24,
R.drawable.w25,R.drawable.w26,
R.drawable.w27,R.drawable.w28,
R.drawable.w29,R.drawable.w30,
};
Bitmap[] bitmaps;//图片数组
int drawIndex = 0;//当前绘制第几帧
从上面的数组中可以看到,一共有30帧,生成动画界面时,会对这30帧进行循环
*闪烁的文字需要drawString这个变量来控制
boolean drawString = false;//是否绘制文字
*两只画笔
Paint paint;//画笔
Paint paint2;
*在构造器中,要创建两个线程,这两个线程会在后边介绍到。
public WelcomeView(KLSDActivity activity) {//构造器
super(activity);
this.activity = activity;//得到activity的引用
getHolder().addCallback(this);//添加Callback接口的实现
initBitmap();//调用初始化方法
welcomeViewDrawThread = new WelcomeViewDrawThread(this);
welcomeViewGoThread = new WelcomeViewGoThread(this);
}
*下面便进行初始化图片、绘制方法、屏幕的监听方法
public void initBitmap()
protected void onDraw(Canvas canvas)
public boolean onTouchEvent(MotionEvent event)
*接口中三个接口的方法,在方法中启动绘制线程以及动画线程
三.刷帧线程WelcomeViewDrawThread:
————欢迎动画界面的服务线程
1.操作流程:
1). 欢迎动画界面(welcomeView)的引用——>睡眠的时间(sleepSpan,此处设为100s)——>循环的标记位—> 构造器(在这之中只需得到欢迎界面的引用,再根据欢迎动画界面得到surfaceholder的引用)
2). 重写run方法,使其在适当的时间调用onDraw方法进行绘制即可,每隔sleepSpan的毫秒数依次调用OnDraw方法,在调用之前许要锁定整个画布,然后在调用之后释放画布,更新屏幕中的内容
3). 循环标记位的set方法
2.代码实现
四.动画生成线程WelcomeViewGoThread类的实现
这部分可以使我们的游戏的欢迎动画动起来。
1) 得到WelcomeView的引用
public WelcomeViewGoThread(WelcomeView welcomeView) {//构造器
this.welcomeView = welcomeView;}//得到welcomeView的引用
2) 有一个run方法, 每次循环将欢迎界面的drawIndex加1,然后判断是否到达数组的最后,当到达最后时,将减10,然后继续循环。
public void run() {//重写的run方法法
while (flag) {//循环
welcomeView.drawIndex++;//自加
if(welcomeView.drawIndex>welcomeView.bitmapsID.length-1){
welcomeView.drawIndex = welcomeView.bitmapsID.length-10;
}
if(welcomeView.drawIndex%5 == 0){
welcomeView.drawString = !welcomeView.drawString;
}
try{
Thread.sleep(sleepSpan);//睡眠
}catch(Exception e){
e.printStackTrace();//打印异常信息 }}}
3) 循环标志为flag的set 方法
public void setFlag(boolean flag){//循环标志位的设置方法
this.flag = flag;}
下周计划:
下周我们将对“帮助”和“关于”界面进行设计与实现。觉得做起来这个东西挺难的,有一些方法、类的调用掌握的不是很好,写点东西困难挺大的。这个游戏的类很多,我们要分不同的线程去编写,要在原本主要代码的基础上加一些东西,不是很简单。
还有三周的时间,尽量可以把这个游戏做的完整些,虽然这种智力类的游戏开发的人很多,类似的东西也很多,当我们想通过自己去做一遍来体会android开发。也许以我们的能力,要开发出来一个新的东西并不是很容易,但是我们会在这个游戏上去加一些东西得以实现。
文件:
第七次报告.pdf
大小:
678KB
下载:
下载