Самая странная ошибка, с которой я сталкивался - PullRequest
1 голос
/ 10 февраля 2012

код ниже. По сути, у меня есть анонимный экземпляр класса Cell, который должен что-то рисовать на экране. В одном из методов, которые я переопределил (аннотировал), я вызываю метод, который существует только внутри анонимного класса (randomFireBubble, отмеченный комментариями). Вот в чем проблема: метод выполняется и запускается (я проверял различные операторы печати, чтобы проверить это), но он ничего не рисует на экране! Но это даже не проблема. Проблема заключается в том, что если я заменю вызов метода телом метода, он будет работать как положено.

По сути, моя проблема заключается в следующем: если я заменяю вызов метода на тело метода, и все работает нормально, почему я не могу просто вызвать метод? Это сбивает меня с толку.

Edit: я должен уточнить, что на самом деле не имеет значения, что делает randomFireBubble. Проблема в том, что если у меня вместо вызова есть тело метода, то он работает, но если я вызываю метод, то нет.

public static Cell Fire (int x, int y, Grid grid)
{
    return new Cell(x, y, grid)
    {

        @Override
        public void draw (int size, int x, int y, Graphics graphics)
        {
            super.draw(size, x, y, graphics);

            cellColor = fireColor(Math.random());

            randomFireBubble(graphics, size); // < -- Problem here
        }

        private void randomFireBubble (Graphics graphics, int size)
        {
            int x1 = (int) StaticCalculations.randomDoubleBetween(- x * 1.5, x * 1.5);
            int y1 = (int) StaticCalculations.randomDoubleBetween(- y * 1.5, y * 1.5);

            int width1 = (int) StaticCalculations.randomDoubleBetween(0, size * 1.5);

            graphics.setColor(fireColor(Math.random()));

            graphics.fillOval((x + 1) * size - size / 2 + x1, (y + 1) * size - size / 2 + y1, width1, width1);
        }

//This method is irrelevant, it works perfectly fine.
        private Color fireColor (double r)
        {
            if(r <= 0.33)
            {
                return Color.yellow;
            }
            else if(r <= 0.66)
            {
                return Color.orange;
            }
            else
            {
                return Color.red;
            }
        }
    };

}

1 Ответ

1 голос
/ 10 февраля 2012

Это потому, что «x» и «y» определены в «draw», но не в «randomFireBubble». Я даже не знаю, как это компилируется для вас. Вероятно, это не так, и вы пропустили это, или есть проблема с кодом, который вы вставили выше.

...