为了账号安全,请及时绑定邮箱和手机立即绑定

最赞回答 / 黄淘淘
因为游戏每升级一次就会触发TIME_CHANGED的消息队列发送一次,而每次的TIME_CHANGED消息队列都因为有 mHandler.sendEmptyMessage(NEXT_LEVEL)在继续发送,所以如果升级了游戏,前面那个游戏等级的TIME_CHANGED消息就要remove掉  这是我的理解
car
mAnimLayout.removeAllViews();
加了这句代码出错
car
代码不能运行
car
代码不能运行
car
代码跳的太快,不知道思路

最赞回答 / 为梦而战之学习
这个主要是使用了TranslateAnimation动画的原因 ,这种动画只是效果上的移动,并没有真正移动ImageView本身,也就是ImageView的真正位置值没有发生变化,你可以打印它们的(x,y)才查看一 下,换句话说当你点击 0和9位置上的ImageView时,虽然看到了交换的效果,但实质上0和9位置上的ImageView还是原来的那两个ImageView,点击的时候还是0和9对应的ImageView响应事件,而不是我们期望的让9和0对应的ImageView去响应事件,所以才在上面加一层布局来...
car
mItemWitdh=(mWidth-mPadding*2-mMargin*(mColumn-1))/mColumn;
这个理解
貌似有点小bug,当在最后一秒完成游戏时会弹两个Dialog

最赞回答 / qq_o夜以罙_0
我的也是,不过原因找到了,主要是由于你创建动画层的时候,宽高是默认的,就是wrap那个,结果你第一次addview进去动画层的时候就自动把宽高设置成了item的宽高,所以你必须在创建动画层的时候设置他的宽高,其实很简单,只要你在addview(动画层)之前RelativeLayout.LayoutParams rp = new RelativeLayout.LayoutParams(mWidth, mHeight); mAnimLayout = new RelativeLayout(getContex...
如果检查的时候有一个失败直接返回,可以省去不必要的循环,效率更高!代码如下:
private void checkSuccess()
{
for (int i = 0; i < mGamePintuItems.length; i++){
ImageView imageView = mGamePintuItems[i];
if (getImageIndexByTag((String) imageView.getTag()) != i) return;

。。。
mHandler.sendEmptyMessage(NEXT_LEVEL);
}
可以用Handler处理,定义常量private static final int REMOVE_VIEWS = 0x112;
在onAnimationEnd里面发送消息mHandler.sendEmptyMessage(REMOVE_VIEWS);
在Handler里面的handleMessage函数里面加个case进行处理
case REMOVE_VIEWS:
mAnimLayout.removeAllViews();
break;
课程须知
本课程是基于Android开发的案例,需要大家熟练的掌握Android和Java相关知识: 1、了解自定义控件的流程及相关知识 2、熟悉Android中的Tween Animation
老师告诉你能学到什么?
通过本课程,你将学到: 1、利用原生的控件来制作游戏 2、自定义控件的相关知识 3、巧妙利用层的概念结合动画实现拼图的无缝切换 4、游戏中限定时间的设置,以及关卡的设计

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消