借助此处的答案,我拥有当前的设置。如何根据是否按下父按钮来禁用子按钮?例如 Button2 当前被禁用,但是当我按下 Button1 时,我现在可以按下 Button2,如果我按下 Button2,Button3 和 Button4 就会启用并且现在可以按下。到目前为止,我这样做的方式如下:声明一个布尔值:
boolean Enable = false;
单击按钮时将 Enable 从 false 更改为 true:
if (type.equals(TAG_ENTITY_ATTRIBUTE_VALUE_GAMEBUTTON1)) {
levelObject = new ButtonSprite(x, y, resourcesManager.gamebutton1_region, resourcesManager.gamebuttonpressed_region, vbom, new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY) {
Enable = true;
}
});
}
禁用除第一个按钮之外的所有其他按钮,并且在按下按钮之前看到 Enable 仍然为 false 其他按钮应该被禁用:
if (ButtonSpriteID != 1) {
levelObject.setEnabled(Enable);
levelObject.setColor(Color.BLACK);
}
最后,如果子项的 id 与父项的 child_id 匹配,则应在按下按钮时启用该按钮,因为 Enable 应设置为 true:
for (int k = 0; k < ButtonSpriteChild.length; k++){
if (ButtonSpriteChild[k] == ButtonSpriteID){
levelObject.setEnabled(Enable);
levelObject.setColor(Color.WHITE);
}
}
运行代码时我没有收到错误,但似乎都没有按我的预期工作。所以任何帮助都会很棒。
更新 1:所以我尝试并删除了 Enable boolean 并尝试了这个:
if (ButtonSpriteID != 1) {
levelObject.setEnabled(false);
levelObject.setColor(Color.BLACK);
}
levelObject.setOnClickListener(new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY) {
for (int k = 0; k < ButtonSpriteChild.length; k++){
if (ButtonSpriteChild[k] == ButtonSpriteID){
levelObject.setEnabled(true);
levelObject.setColor(Color.WHITE);
}
}
}
});
还是不行。有人建议我覆盖 onTouchedArea 但我不确定我将如何实现它。
更新 2:我现在尝试过:
if (levelObjects.get(j).isPressed()) {
levelObjects.get(i).setEnabled(true);
levelObjects.get(i).setColor(Color.WHITE);
}
还是不行。还在寻求帮助。
更新 3:我现在尝试过:
for (final ButtonSprite buttonSprite : levelObjects) {
if (ButtonSpriteID != 1) {
buttonSprite.setEnabled(false);
buttonSprite.setColor(Color.BLACK);
}
buttonSprite.setOnClickListener(new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX,
float pTouchAreaLocalY) {
for (int k = 0; k < ButtonSpriteChild.length; k++){
if (ButtonSpriteChild[k] == ButtonSpriteID){
buttonSprite.setEnabled(true);
buttonSprite.setColor(Color.WHITE);
}
}
}
});
}
还是打不开,有救吗?请?
更新 4:我现在尝试过:
levelObjects.get(j).setOnClickListener(new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX,
float pTouchAreaLocalY) {
for (int k = 0; k < ButtonSpriteChild.length; k++){
if (ButtonSpriteChild[k] == ButtonSpriteID){
levelObjects.get(i).setEnabled(true);
levelObjects.get(i).setColor(Color.WHITE);
}
}
}
});
这不起作用,因为它给了我关于将“i”设置为 final 的错误,但不能这样做,因为“i”在 for 循环中。
更新5:所以我试过了
if (ButtonSpriteChild[k] == ButtonSpriteID){
levelObject.setOnClickListener(new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX,
float pTouchAreaLocalY) {
levelObject.setEnabled(true);
levelObject.setColor(Color.WHITE);
}
});
}
还是不行。
更新6:所以我试过了
if (ButtonSpriteChild[k] == ButtonSpriteID){
levelObject.setOnClickListener(new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX,
float pTouchAreaLocalY) {
levelObject.setEnabled(true);
levelObject.setColor(Color.WHITE);
}
});
}
如果按下另一个按钮并且我按下的某些按钮不是该按钮的子级或父级,则只会发生一些奇怪的事情。