3

ここでの回答のおかげで、現在のセットアップができました。親ボタンが押されたかどうかに基づいて子ボタンを無効にするにはどうすればよいですか? たとえば、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);
        }
    });
}

別のボタンを押すと、1つのボタン/レベルオブジェクトだけが影響を受け、押したボタンの一部がそのボタンの子でも親でもないという奇妙なことが起こります。

4

1 に答える 1