安卓2048小游戏的构建
1、所需控件:
(1)自定义控件(对view的继承)
(2)Canvas、paint、bitmap(画图控件)
(3)触屏监听器(OnTouchListener的实现)
2、过程实现:
(1)自定义控件:
对view进行继承
Public MyView extends View{}
主要内容:
1)继承view的三个构造方法
public MyView (Context context,AttributeSet attrs,int defStyle){
super(context,attrs,defStyle);
}
public MyView (Context context,AttributeSet attrs){
super(context,attrs,0);
}
public MyView (Context context){
super(context);
}
//显式调用父类的构造函数,完成view与view的父类及更高层父类的 //属性、方法的构建
2)重写view中的onDraw方法
创建4*4的int型数组记录相应位置的分数
使用Canvas、paint、bitmap等画图控件,画出你想要的MyView显示效果。
protected void onDraw(Canvas canvas){
super.onDraw(canvas); //传canvas给父类方法,完成父类的重绘构建
Bitmap mybitmap=Bitmap.createBitmap(this.getWidth(),
this.getHeight(),Config.ARGB_8888);
//新建位图
Mycanvas mycanvas=new Canvas(mybitmap);
//连锁画布与位图,即将来画图画在位图上
Paint mypaint=new Paint(); //新建画笔
//。。。。。。略
//设置画笔属性,如:设置轻灰色,无锯齿,线条粗细值1,实心画图(mypaint.setStyle(Paint.Style.FILL);)
RectF r =new RectF();// 新建一个矩形范围
r.left=0;
r.top=0;
r.right=this.getWidth();
r.bottom=this.getHeight();
mycanvas.drawRoundRect(r,30,30,mypaint);
//画一个填充全屏的圆角矩形
。。。。。。。
//同理,利用该方法在屏幕中部画出16个圆角矩形
//接下来,根据数组的存值,在圆角矩形内,画上分值(2、16等)
mypaint.setColor(Color.WHITE);
//将画笔设置颜色为白色(要与上一次设置的颜色不同,否则显不出)
mypaint.setTextSize(40);//设置要画文字的字体大小
//画出相应位置的分数
//canvas.drawText(String str,float x,float y,Paint paint);
//str为将要画的文字,x、y为文字左下角的坐标,paint为要传入的//画笔对象
//由于要传入String对象,需将int类型数据转为String类型
//1、用Integer 接收 int类型数据,再调用toString()方法转化:
//如:Integer it=new Integer();
//canvas.drawText(it.toString , x, y, paint);
//2、用字符串与int类型数据的加法(结果转为字符串型)
//int count=2;
//canvas.drawText(“”+count, x, y, paint);
//根据数字的不同(一位数、两位数、三位数、四位数)调整
//TextSize与左下角坐标位置x,y。
。。。。。。
//诸如此法画出总分数
。。。。。。
//最后利用onDraw(Canvas canvas)方法里的canvas给MyView
//画上位图,起始点坐标(0,0)
Canvas.drawBitmap(mybitmap,0,0,mypaint);
}
(2)OnTouchListener的实现
1)传入MyView的对象,其中包含了要处理的数组
2)按下(DOWN)获取起始点的坐标,松开(UP)获取结束点的坐标
3)根据两次坐标确定滑动方向:
可以用数学三角函数的比较,如:
x2>x1&&Math.abs((y2-y1)/(x2-x1))<Math.tan(Math.PI/4)
x2>x1:表明有向右的分量,即可能向右;
后者:斜率的绝对值<tan(PI/4),表明滑动方向在右方向的正负45度范围内,
即:滑动方向为“右”;
其他类似判之。
4)根据方向处理数组,满足该游戏规则;
5)调用MyView.invalidate();使原有MyView显示失效,激活重绘;
(3)主界面与活动:
1)给界面添加MyView控件,
2)给MyView控件设置触屏监听器