我正在尝试在 android 工作室中制作类似钢琴瓷砖的东西,我希望当以相同的速度按下播放按钮时,瓷砖开始出现



我使用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();
}
}
});

请随时评论您对这个问题的任何想法/问题,我会尽我所能提供帮助

相关内容

最新更新