我使用handler.postdelay来完成这项工作,但每当我开始点击postdelay不起作用时,它有时会很快,有时会很慢。这是代码private处理程序mhandler=新处理程序((;
private Runnable mcontinue = new Runnable() {
@Override
public void run() {
//row5
RockLocationRow5 = RockLocationRow4;
setRockLocation(RockLocationRow5, 5);
//row4
RockLocationRow4 = RockLocationRow3;
setRockLocation(RockLocationRow4, 4);
//row3
RockLocationRow3 = RockLocationRow2;
setRockLocation(RockLocationRow3, 3);
//row2
RockLocationRow2 = RockLocationRow1;
setRockLocation(RockLocationRow2, 2);
//row1
RockLocationRow1 = r.nextInt(3) + 1;
setRockLocation(RockLocationRow1, 1);
mhandler.postDelayed(this, 3000);
}
};
每当游戏开始时,我都会在initgame函数中调用它,如果我点击任何瓦片,我也会将其称为Runnable他们的
iv_13.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(RockLocationRow1 == 3){
mcontinue.run();
}
else{
//endGame();
}
}
});
或者他们还有什么我可以用的吗??我是个初学者。。。
RockLocationRow就是这样初始化的
//row3
RockLocationRow3 = 1;
iv_31.setImageResource(tapImage);
//row2
RockLocationRow2 = r.nextInt(3) + 1;
setRockLocation(RockLocationRow2, 2);
//row1
RockLocationRow1 = r.nextInt(3) + 1;
setRockLocation(RockLocationRow1, 1);
这是setRockLocation
private void setRockLocation(int place, int row){
if(row == 1){
iv_11.setImageResource(emptyImage);
iv_12.setImageResource(emptyImage);
iv_13.setImageResource(emptyImage);
switch (place) {
case 1:
iv_11.setImageResource(tapImage);
break;
case 2:
iv_12.setImageResource(tapImage);
break;
case 3:
iv_13.setImageResource(tapImage);
break;
}
}
第2、3、4和5行相同
我想我发现了问题。问题是单击互动程序时。如果我已经理解好了,这个代码是这样的:
iv_13.setOnClickListener(new View.OnClickListener() {
//rest of your code...
});
您可以看到,当您单击磁贴时,您调用Runnable的方法run((:mcontinue.run();
通过调用此方法,您可以再次执行postDelayed:mhandler.postDelayed(this, 3000);
。因此,对于瓦片上的每一次单击,您都会执行postDelayed。因此,从您点击瓷砖开始,每隔3秒就会出现新的瓷砖。如果你点击了很多区块,postDelayed会执行很多次,我们会很快显示区块
一个可能是正确的解决方案是在单击磁贴时删除mcontinue.run();
。像这样:
iv_13.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(RockLocationRow1 == 3){
}
else {
//endGame();
}
}
});
请随时评论您对这个问题的任何想法/问题,我会尽我所能提供帮助