关于2048游戏,怎么做出动画效果
关于2048游戏,如何做出动画效果?
2048的算法是从网上借鉴过来的。
在MainActivity里,实现对触摸的响应方法,如下:
Maps类中有一个4*4的Button数组引用,其slide()方法如下:
initColor()方法实现数值和颜色的匹配:
目前的主体功能已实现,可是,我发现仍有待完善的地方:
1⃣️ 看网上下载的2048游戏,它在上、下、左、右滑动的时候,控件的移动能感觉到动画效果,而我这样子做,没有动画效果,滑动一下,就改变相应的值了,然后在空白的地方随机出现一个数字2,或4。如何实现动画效果呢?
2⃣️在数字有改动的地方,相应的Button按钮会变大一下,然后再变回到原来的样子,这也是一种动画效果吧?该如何实现呢?
------解决思路----------------------
先位移动画 再重绘 每个小方块做成自定义组件
2048的算法是从网上借鉴过来的。
在MainActivity里,实现对触摸的响应方法,如下:
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN) {
startX = event.getX();
startY = event.getY();
} else if(action == MotionEvent.ACTION_UP) {
endX = event.getX();
endY = event.getY();
int direction = getSlideDirection(startX,startY,endX,endY);
//Toast.makeText(this, ""+direction, Toast.LENGTH_SHORT).show();
boolean gameOver = maps.slide(direction);
if(gameOver) {
if(maps.getScore() > maps.getBestScore()) {
Toast.makeText(this, "恭喜超过最佳记录!!!", Toast.LENGTH_SHORT).show();
//存到文件中,方便下次读取
maps.setBestScore(maps.getScore());
//setText
best.setText(maps.getScore()+" 分");
}
Toast.makeText(this, "游戏结束!!!", Toast.LENGTH_SHORT).show();
}
}
return super.dispatchTouchEvent(event);
}
Maps类中有一个4*4的Button数组引用,其slide()方法如下:
public boolean slide(int direction) {
switch(direction) {
case Direction._LEFT:
left_remove_blank();
left();
break;
case Direction._RIGHT:
right_remove_blank();
right();
break;
case Direction._UP:
up_remove_blank();
up();
break;
case Direction._DOWN:
down_remove_blank();
down();
break;
}
if(hasEmptyItem()) {
addNumber();
initColor();
return false;
} else {
return isFull();
}
}
initColor()方法实现数值和颜色的匹配:
private void initColor() {
int [] color = {
0x1F000000,0xFFFFFF66,0xFF99FF33,0xFF66FF00,
0xFF66FFFF,0xFF3399FF,0xFF3366FF,0xFF6633FF,
0xFFCC66FF,0xFFFF66CC,0xFFFF3333,0xFFCC6633
};
String strValue;
int value;
int v2;
for(int i=0;i<4;i++) {
for(int j=0;j<4;j++) {
strValue = maps[i][j].getText().toString();
if(strValue.equals("")) {
maps[i][j].setBackgroundColor(color[0]);
} else {
value = Integer.valueOf(strValue);
v2 = (int) (Math.log(value) / Math.log(2));
maps[i][j].setBackgroundColor(color[v2 % color.length]);
if(v2 > 16) {
maps[i][j].setTextSize(15);
} else if(v2 >= 10) {
maps[i][j].setTextSize(20);
} else {
maps[i][j].setTextSize(30);
}
}
}
}
}
目前的主体功能已实现,可是,我发现仍有待完善的地方:
1⃣️ 看网上下载的2048游戏,它在上、下、左、右滑动的时候,控件的移动能感觉到动画效果,而我这样子做,没有动画效果,滑动一下,就改变相应的值了,然后在空白的地方随机出现一个数字2,或4。如何实现动画效果呢?
2⃣️在数字有改动的地方,相应的Button按钮会变大一下,然后再变回到原来的样子,这也是一种动画效果吧?该如何实现呢?
------解决思路----------------------
先位移动画 再重绘 每个小方块做成自定义组件