Добавить изображение поверх другого изображения?

#java #image

#java #изображение

Вопрос:

Я пытаюсь создать пошаговую игру, пока все идет нормально, однако теперь я подошел к той части, где я хочу иметь возможность перемещать юнитов. Я использую изображения для определения различных типов местности и другое изображение для отображения объекта, но я не могу заставить объект появляться над ландшафтом, он появляется только под ландшафтом. Похоже, я первый, кто столкнулся с этой проблемой, так что я иду по неправильному пути?

Плитка с изображением рельефа:

     protected void paintComponent(Graphics paintIt) //paints this sexy-hex
{
    super.paintComponent(paintIt);  //not sure if we need this? lol
    paintIt.setColor(is);   //sets the color (later not even used, we need pics and shit)
    //paintIt.fillPolygon(hex); //fills the hexagon with the desired color, will not be used later on either
    if(isExplored)
        paintIt.drawImage(image, 0, 0, null);

    else
        paintIt.fillPolygon(hex); // I want to paint it black


    if (hoover) //are we pointing at this cell?
    {
        paintIt.setColor(Color.WHITE);  //we want the nice line around the cell to be white
        Graphics2D g2 = (Graphics2D) paintIt;   
        g2.setStroke(new BasicStroke(3));   //and 3 pixels wide (we are allowed to change it, supposedly in proportion to "rad"
        g2.drawPolygon(hex);    //draws the line around the hexagon
    }       
}
  

Блок:

     protected void paintComponent(Graphics paintIt)
{
    if(!selected)
    {
        paintIt.drawImage(image, 0, 0, null);
        paintIt.drawImage(image2,0,0,null);
        /*
        super.paintComponent(paintIt);
        paintIt.setColor(Color.BLACK);
        paintIt.drawPolygon(shape); */  
    }
    else
    {
        super.paintComponent(paintIt);
        paintIt.setColor(Color.RED);
        paintIt.drawPolygon(shape); 
    }
}
  

Извините за комментарии и извините за некоторый код, который даже не используется, просто думаю, что лучше сохранить его до завершения проекта, если нам нужно будет куда-то вернуться.
Изображение объекта меньше, чем рельеф, поэтому оно подходит. Я тестировал без закрашивания рельефа, поэтому я знаю, что модуль нарисован под ним.
Если вам все еще нужен код, чтобы понять, что я делаю, скажите мне, просто подумал, что это соответствующие части.
ПРАВКА # 2
Плитка — это класс, созданный из другого класса, который расширяет JFrame. Unit-class создается из этого класса JFrame, но сохраняется в tile. И плитка, и модуль являются J-компонентами.

Комментарии:

1. Да, похоже, вы делаете это неправильно. Если вы предоставляете исходный код для иллюстрации того, что вы делаете, легче указать вам правильное направление.

2. Какую систему Java GUI вы используете: Swing, Swt … ???

3. Множество возможных причин, линейно возрастающих с количеством возможных наборов инструментов, которые вы могли бы использовать. Сузьте круг поиска для нас! И опубликовать какой-нибудь вкусный код!

4. Я уверен, что не потратил впустую много своего времени. 😉

5. @user: Эндрю, возможно, использовал не самый лучший тон, но его сообщение верно: при использовании существующей библиотеки (особенно часто используемой) обычно намного безопаснее предположить, что в ней нет ошибки, но проблема в вашем коде (по крайней мере, пока не доказано обратное).

Ответ №1:

Исправлено, мне пришлось нарисовать изображение единиц измерения в классе terrain, чтобы оно отображалось сверху. Поскольку я уже сохранил модуль в классе, я не знаю, почему я не сделал это таким образом с самого начала. В любом случае спасибо <3