2016-08-03 14 views
1

ich einen Knopf (reloadButton) haben, die eine ist ImageButtonBounds eines Image

Ich möchte setBounds() es aber das Problem ist seine ImageButtonStyle.imageUp und ImageButtonStyle.imageDown sind gerundet Bilder und ich will nicht die Grenzen Rechteck machen wie diese Taste berührt werden kann

Wie kann ich setBounds auf diese Schaltfläche?

Hier ist mein Code

TextureRegion buttonUp = Assets.getTextureRegion(Assets.getTextureAtlas(Assets.reloadButton), "up"); 

TextureRegion buttonDown = Assets.getTextureRegion(Assets.getTextureAtlas(Assets.reloadButton), "down"); 

ImageButton.ImageButtonStyle buttonStyle = new ImageButton.ImageButtonStyle(); 

buttonStyle.imageUp = new TextureRegionDrawable(buttonUp); 

buttonStyle.imageDown = new TextureRegionDrawable(buttonDown); 

reloadButton = new ImageButton(buttonStyle); 

// reloadButton.addListener() 
+0

könnten Sie bieten Ihren aktuellen Code? –

+1

Ich denke nicht, dass Sie mit 'setBounds' so spezifisch sein können. Sie können die 'Actor.fire (Event)' Methode überschreiben und prüfen, ob Ihr abgerundetes Rechteck den Punkt enthält (Sie würden aber einen Radius benötigen). –

+0

Ich bearbeite Frage – MAGS94

Antwort

1

Schauspieler Grenzen sind immer ein Rechteck. Wenn Sie eine andere Form testen möchten, überschreiben Sie die hit Methode Ihres Actor. Zum Beispiel für ein Rechteck mit abgerundeten Ecken, Unterklasse Image und tut dies (wo rad der Eckenradius ist):

@Override 
public Actor hit (float x, float y, boolean touchable) { 
    Actor hit = super.hit(x, y, touchable); //is in rectangle 

    if (hit != null){ //reject corners if necessary 
     boolean keep = true; 
     if (x < rad){ 
      if (y < rad) keep = inCircle(x, y, rad, rad, rad); 
      else if (y > getHeight() - rad) keep = inCircle(x, y, rad, getHeight() - rad, rad); 
     } else if (x > getWidth() - rad){ 
      if (y < rad) keep = inCircle(x, y, getWidth() - rad, rad, rad); 
      else if (y > getHeight() - rad) keep = inCircle(x, y, getWidth() - rad, getHeight() - rad, rad); 
     } 
     if (!keep) hit = null; 
    } 
    return hit; 
} 

private boolean inCircle(float x, float y, float centerX, float centerY, float radius) { 
    float dx = x - centerX; 
    float dy = y - centerY; 
    return dx * dx + dy * dy <= radius * radius; 
} 
+0

aber super.hit (x, y, touchable) zurück Schauspieler nicht boolean – MAGS94

+0

@ MAGS94 Ups! Fest. – Tenfour04