根据我目前的设置,感谢答案here https://stackoverflow.com/questions/15116158/andengine-drawing-a-line-between-level-objects-entites-using-matching-ids。如何根据父按钮是否被按下来禁用子按钮?例如,Button2 当前处于禁用状态,但是当我按 Button1 时,我现在可以按 Button2,如果我按 Button2,则 Button3 和 Button4 会变为启用状态,现在可以按下。
到目前为止,我的做法如下:
声明一个布尔值:
boolean Enable = false;
单击按钮时将启用从 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);
}
});
}
如果按下另一个按钮,并且我按下的某些按钮不是该按钮的子按钮或父按钮,则会发生奇怪的事情,只有一个按钮/级别对象受到影响。