Как увеличить переменные имена, которые уже массив - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь закодировать 2D-игру, чтобы рисовать на наземные текстуры, я использую массив, но я хочу увеличить имя, например, от line0 до line1, но я не знаю, как.

BufferedImage line0[] = {/*graphics*/}
BufferedImage line1[] = {/*graphics*/}
BufferedImage line2[] = {/*graphics*/}
BufferedImage lines[] = {
 line0,
 line1,
 line2
}

protected void paintComponent(Graphics g){
    super.paintComponent(g);

    Graphics2D g2 = (Graphics2D) g;

    int rectWidth = GameEngine.PREFERRED_GRID_SIZE_PIXELS; /* ground tile width */
    int rectHeight = GameEngine.PREFERRED_GRID_SIZE_PIXELS; /* ground tile height */

    for(int i = 0; i < GameEngine.NUM_ROWS; i++){ /* NUM_ROWS is the frame height */
        for(int j = 0; j < lines.lenght(); j++){
            /* draw the textures here (lines array) */
        }
    }
}

1 Ответ

0 голосов
/ 07 февраля 2019

Этого можно добиться с помощью API Java Reflections, получив имена полей класса и затем получив его значение по имени поля.

Ниже приведен пример кода использования отражения.Вы можете изменить его для использования в вашем классе.

Class  aClass = MyObject.class
Field field = aClass.getField("someField");

MyObject objectInstance = new MyObject();

Object value = field.get(objectInstance);

field.set(objetInstance, value);

Ниже приведен пример, более похожий на тип вашего класса:

public class ReflectionDemo
{
    public static void main(String args[]) throws Exception
    {
        Class<ReflectionDemoClass> clazz = ReflectionDemoClass.class;

        ReflectionDemoClass objectInstance = new ReflectionDemoClass("Avinash", "Sagar", "Stack", "Overflow");

        for (int i = 0; i < 4; i++)
        {   
            Field field = clazz.getField("line"+i);
            Object value = field.get(objectInstance);
            System.out.println(value.toString());
        }
    }
}

class ReflectionDemoClass
{
    public String line0;
    public String line1;
    public String line2;
    public String line3;
    public String lines[] =
    { line0, line1, line2, line3 };

    public ReflectionDemoClass(String line0, String line1, String line2, String line3)
    {
        this.line0 = line0;
        this.line1 = line1;
        this.line2 = line2;
        this.line3 = line3;
    }
}
...