0

そのため、現在、Key クラスは白鍵のみを生成できます。これは、キー イメージのファイル名 (「white-key.png」および「white-key-down.png」) をハードコーディングしたためです。抽象化を使用して Key クラスを変更し、白鍵または黒鍵のいずれかを表示できるようにするにはどうすればよいですか?

import greenfoot.*;  // (World, Actor, GreenfootImage, and Greenfoot)

public class Key extends Actor
{
    private boolean isDown;
    private String key;
    private String sound;
    /**
     * Create a new key.
     */
    public Key(String keyName, String soundFile)
    {  
       key = keyName;
       sound = soundFile;
    }

    /**
     * Do the action for this key.
     */
    public void act()
    {
        if ( !isDown && Greenfoot.isKeyDown(key)) 
        {
            play();
            setImage("white-key-down.png");
            isDown = true;
        }
        if ( isDown && !Greenfoot.isKeyDown(key))
        {
            setImage("white-key.png");
            isDown = false;
        }
    }

    /**
     * Play the note of this key.
     */
    public void play()
    {
        Greenfoot.playSound(sound);
    }
}
4

1 に答える 1

0

同じクラス内で画像を変更するオプションではなく、異なる画像を持つ異なるクラスが必要であることをあなたの質問から理解しています。

これを行うにはいくつかの方法があります。アイデアを提供するための簡単なものを次に示します。

import greenfoot.*;  // (World, Actor, GreenfootImage, and Greenfoot)

abstract public class Key extends Actor
{
    private boolean isDown;
    private String key;
    private String sound;

    abstract String getImageFileName();
    abstract String getDownImageFileName();

    /**
     * Create a new key.
     */
    public Key(String keyName, String soundFile)
    {  
       key = keyName;
       sound = soundFile;
    }

    /**
     * Do the action for this key.
     */
    public void act()
    {
        if ( !isDown && Greenfoot.isKeyDown(key)) 
        {
            play();

            String image = getDownImageFileName();
            setImage(image);

            isDown = true;
        }
        if ( isDown && !Greenfoot.isKeyDown(key))
        {
            String image = getImageFileName();
            setImage(image);
            isDown = false;
        }
    }

    /**
     * Play the note of this key.
     */
    public void play()
    {
        Greenfoot.playSound(sound);
    }
}

次に、それぞれ独自のイメージを持つ新しいクラスを追加できます。

public class WhiteKey extends Key
{
    @Override
    String getImageFileName()
    {
        return "white-key.png";
    }

    @Override
    String getDownImageFileName()
    {
        return "white-key-down.png";
    }
}

public class BlackKey extends Key
{
    @Override
    String getImageFileName()
    {
        return "black-key.png";
    }

    @Override
    String getDownImageFileName()
    {
        return "black-key-down.png";
    }
}
于 2015-12-28T15:59:41.683 に答える