powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Расположение нескольких компонентов
10 сообщений из 10, страница 1 из 1
Расположение нескольких компонентов
    #39129716
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Начал создавать небольшое приложение и столкнулся с проблемой - необходимо, чтобы на фоне некоторой картинки двигались два объекта - один программно, а второй - самим пользователем с клавиатуры, и еще одни компонент, отображающий препятствия.
Создал панель с задним фоном, создал отдельный поток с нпц компьютера и компонент с препятствиями.
Вопрос, собственно, в следующем - как все это наложить друг на друга? То есть нпц у меня по фону бегает, но стоит добавить компонент с препятствиями, как нпц пропадает.
Вот, собственно, код:

Компонент с препятствиями
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class NotePaint  extends JComponent {
    private int x=65,y=40;
    
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        g2d.setColor(Color.black);
     
        g2d.drawOval(x, y, 20, 10);

    }
}



НПЦ
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public class NPC extends JComponent{
Image image = new ImageIcon("images/npc.png").getImage();

    private int xi;
    private int yi; 

public NPC(){
    setBorder(BorderFactory.createLineBorder(Color.yellow));
    //setLayout(null);
   // setSize(500, 500);
}

    public int getXi() {
        return xi;
    }


    public void setXi(int x) {
        this.xi = x;
    }


    public int getYi() {
        return yi;
    }

    public void setYi(int y) {
        this.yi = y;
    }
   
        public void paintComponent (Graphics g) {
            super.paintComponent(g);
            //g.drawOval(getXi(), getYi(), 20, 20);
            //  g.drawImage(image, 0, 0, null);
            g.drawImage(image, getXi(), getYi(), this);
 
        
    }
    
}



Основной файл
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
import java.awt.BorderLayout;
import javax.swing.JFrame;

public class NewClass {
private int x = 3;
private int y = 20;

    public static void main (String[] args) {
        
        NewClass main = new NewClass();
        main.go();
    }
 
    public void go () {
        JFrame frame = new JFrame();
        ImagePanel background = new ImagePanel("images/Bnote_stan.jpg"); 
        NPC panel = new NPC();
        NotePaint BNote = new NotePaint();
        
        frame.getContentPane().add(background);
        background.setLayout(new BorderLayout());
        background.add(panel);
        //Если раскомментировать эту строку, npc пропадает
        //background.add(BNote);

 
        frame.setSize(500, 500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
         Runnable r = new NPCRunnable(panel);
         Thread t = new Thread(r);
         t.start();  
    

}
        
    
class NPCRunnable implements Runnable
{
  
   private NPC img;
   public static final int STEPS = 500;
   public static final int DELAY = 500;
 
   
   public NPCRunnable( NPC img)
   {
      this.img=img;
   }

   public void run()
   {
      try
      {
         for (int i = 1; i <= STEPS; i++)
         {
            x=x+5;
            img.setXi(x);
            img.setYi(y);
            img.repaint();
            Thread.sleep(DELAY);
         }
      }
      catch (InterruptedException e)
      {
      }
   }
}
}
...
Рейтинг: 0 / 0
Расположение нескольких компонентов
    #39129728
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein
Код: java
1.
2.
3.
4.
  background.setLayout(new BorderLayout());
        background.add(panel);
        //Если раскомментировать эту строку, npc пропадает
        //background.add(BNote);


Ну, вот так BorderLayout работает. Там констрейнтом надо передавать куда контрол кинуть. По-умолчанию оно в CENTER, кажется кидает вот и перекрывает одно другое.
Как вы вообще с layout manager-ом двигать всё собрались - не понятно.

Swing не предназначен для 2D анимации. Не нужны вам LayoutManager, extends JComponent, Border и тому подобное.
- Для 2D анимации нужно использовать Java2D, а лучше JavaFX. Гурманы могут использовать Processing - достаточно шустрая и удобная штука.
- Примеры для Java2D есть в demo к JDK. Его сейчас отдельно от самого JDK качать надо Demos and Samples
- Туториалов по 2D на JavaFX - полный гугл:
http://gamedevelopment.tutsplus.com/tutorials/introduction-to-javafx-for-game-development--cms-23835
https://carlfx.wordpress.com/2012/03/29/javafx-2-gametutorial-part-1/
- Странный выбор языка для реализации 2D либо не удачный выбор задачи для изучения Java. Я бы на Unity в первую очередь смотрел.
...
Рейтинг: 0 / 0
Расположение нескольких компонентов
    #39129732
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё, если тема интересна, то стоит хорошенько изучить способы реализации Game Loop
http://www.koonsolo.com/news/dewitters-gameloop/
Хотя, проще, конечно, взять фреймверк, который его уже нормально реализует
...
Рейтинг: 0 / 0
Расположение нескольких компонентов
    #39129742
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, просто с JavaFX пока как-то не доводилось работать, все больше как-то совсем начальные сведения.
...
Рейтинг: 0 / 0
Расположение нескольких компонентов
    #39129779
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeinBlazkowicz, просто с JavaFX пока как-то не доводилось работать, все больше как-то совсем начальные сведения.
Ну, если вам всё равно что изучать, то зачем изучать древнее старье?
...
Рейтинг: 0 / 0
Расположение нескольких компонентов
    #39129784
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJava2D, а лучше JavaFX
+1
цикл отрисовки сцены должен быть правильный
либо без extends JComponent либо JavaFX
...
Рейтинг: 0 / 0
Расположение нескольких компонентов
    #39129800
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНу, если вам всё равно что изучать, то зачем изучать древнее старье?
Да оно как-то само по лабам изучилось)

Да и у того же Хорстманна в двухтомнике swing есть, а javafx - нет)
...
Рейтинг: 0 / 0
Расположение нескольких компонентов
    #39129804
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeinДа оно как-то само по лабам изучилось)

Ну, на "изучилось", это не похоже. Странно, что вы выбрали один пункт из моих рекомендаций и начинаете с ним спорить. Если остро хочется только Java2D, то качайте Demo для JDK, там есть примеры Java2D анимации.
Миксовать 2D графику и Swing не нужно. Swing это набор GUI контролов, layout manager-ов и другой чепухи, которая для 2D не шибко полезна.

TimeinДа и у того же Хорстманна в двухтомнике swing есть, а javafx - нет)
Тогда совет. Отложите Java в сторонку и посвятите время изучению английского. Хотя, одно другому и не мешает, в принципе.
...
Рейтинг: 0 / 0
Расположение нескольких компонентов
    #39129814
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczTimeinДа оно как-то само по лабам изучилось)

Ну, на "изучилось", это не похоже.
Неправильно выразился. "Начало изучаться".
BlazkowiczСтранно, что вы выбрали один пункт из моих рекомендаций и начинаете с ним спорить.
Нет, ни в коем случае, я с вами не спорю. Думаю, просто с какой стороны взяться и как более эффективно это сделать.

TimeinДа и у того же Хорстманна в двухтомнике swing есть, а javafx - нет)
Тогда совет. Отложите Java в сторонку и посвятите время изучению английского. Хотя, одно другому и не мешает, в принципе.[/quot]
А к чему этот совет?) Где я ошибся?)
...
Рейтинг: 0 / 0
Расположение нескольких компонентов
    #39129823
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeinА к чему этот совет?) Где я ошибся?)
Отсылка к Хорстману и лабам как основному источнику знайний. При том что на английском материала во-первых на один-два порядка больше. А во-вторых он ещё и актуальный к тому же.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Расположение нескольких компонентов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]