2015-09-21 16 views
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); 
    } 
} 

回答

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"; 
    } 
} 
相关问题