我正在编写游戏“ Simon”,并且在弄清楚如何使用可运行对象和处理程序时遇到了一些麻烦。这是游戏的一部分,在玩家必须按下按钮之前,颜色会以顺序模式点亮。
这是我到目前为止的代码:
Handler handler = new Handler();
Runnable g = new Runnable() {
@Override
public void run() {
setBtnBackGround(oldColors[0], 10, mButtons[0]);
}
};
Runnable r = new Runnable() {
@Override
public void run() {
setBtnBackGround(oldColors[1], 10, mButtons[1]);
}
};
Runnable y = new Runnable() {
@Override
public void run() {
setBtnBackGround(oldColors[2], 10, mButtons[2]);
}
};
Runnable b = new Runnable() {
@Override
public void run() {
setBtnBackGround(oldColors[3], 10, mButtons[3]);
}
};
还:
for (int i = 0; i < mGame.getLevel(); i++) {
int color = colors.get(i);
setBtnBackGround(newColors[color], 10, mButtons[color]);
if (color == 0) {
handler.postDelayed(g, 1000);
} else if (color == 1) {
handler.postDelayed(r, 1000);
} else if (color == 2) {
handler.postDelayed(b, 1000);
} else {
handler.postDelayed(y, 1000);
}
}
所有按钮都同时点亮,因为我猜它们都在“消息序列”上一个接一个地放置了吗?我将如何使用可运行物体/手柄来分隔照明灯?
非常感谢你们!
所有按钮同时亮起的原因是,您for
循环遍历了所有的值,i
而不必等待它们之间的所有时间。
所以它有效地调用
//start loop
//i = 0
handler.postDelayed(g, 1000);
...
//i = 1
handler.postDelayed(r, 1000);
...
//i = mGame.getLevel()-1
handler.postDelayed(b, 1000);
//end loop
都在同一时间。
本身没有队列,因此您需要根据自己所在的位置来增加延迟,以自行i
完成。试试这个:
int LIGHT_DURATION = 1000;
for (int i = 0; i < mGame.getLevel(); i++) {
int color = colors.get(i);
int delay = LIGHT_DURATION*i;
setBtnBackGround(newColors[color], 10, mButtons[color]);
if (color == 0) {
handler.postDelayed(g, delay);
} else if (color == 1) {
handler.postDelayed(r, delay);
} else if (color == 2) {
handler.postDelayed(b, delay);
} else {
handler.postDelayed(y, delay);
}
}
我不确定setBtnBackGround(newColors[color], 10, mButtons[color]);
均值/参数是什么,但是我使用上面添加的代码的方式如下:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句