关于2048游戏,如何做出动画效果?

liuhuabai100 2015-04-30 01:19:23
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按钮会变大一下,然后再变回到原来的样子,这也是一种动画效果吧?该如何实现呢?
...全文
450 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
答题小助手 2015-04-30
  • 打赏
  • 举报
回复
先位移动画 再重绘 每个小方块做成自定义组件

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧