TODO Auto-generatedmethodstub

Для начала создадим проект. Назовем его «Justgame». И сразу создаем класс Display.java. В него пишем: publicstaticvoidmain(String[] args) {                           JFrameframe = newJFrame(/* название нашей игры */);                           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                           frame.setExtendedState(JFrame.MAXIMIZED_BOTH);                           frame.setUndecorated(true);                           frame.setVisible(true);            } Теперь разберемся, что мы сделали. JFrameframe = newJFrame(/*название нашей игры*/); мы создаем рамку, которая и будет отображаться при запуске нашей игры frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); устанавливаем операцию, которая будет происходить при нажатии на крестик. EXIT_ON_CLOSE — выйтиизпрограммы frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setUndecorated(true); устанавливаем нашей рамке максимальные размеры, убираем декорации(кнопки свернуть, закрыть, уменьшить/увеличить и т.п.), т.е. делаем игру на весь экран. Если вы хотите, чтобы игра не была бы на весь экран, то используйте: frame.setSize(/*ширина*/,/*высота*/);

Frame.setResizable(false); //false чтобы нельзя было бы поменять размеры рамки, true -можно

frame.setVisble(true);

— делаем рамку видимой

Только не забудьте, все настройки рамки надо писать до того, как вы сделаете её видимой

Ну чтож, теперь нажимаем «Run» и пробуем запустить нашу игру. Если все написано правильно, у вас не должны возникать ошибки и должно появиться пустое, серое окно.

Серое окно… Как скучно… Давайте создадим что-нибудь поинтереснее.

Создадим новый класс, под названием «Main». Main класс у нас будет являться панелью, которую мы вставим в рамку, по этому он должен расширять JPanel. (Для тех, кто не знает, расширять пишется как extends после названия класса)
Возвращаемся в класс Display и после настроек рамки, но перед установлением её видимости, пишем:

frame.add(newMain());


Вы спросите — «Ну и зачем мы это сделали?». Представьте себе картину. Эта картина и является конечная наша игра. А теперь представьте рамку. Без ничего внутри, просто пустую рамку. На ней ничего нельзя нарисовать, она бесполезна. Для этого, мы вставили в картину пустой лист, на котором программа в дальнейшем может рисовать картину. На этом закончим наше лирическое отступление и вернемся к классу Main.

Нам нужно осуществить отрисовку, по этому мы должны добавить метод paint. Для этого пишем:

publicvoidpaint(Graphics g) {

//отрисовка всех объектов

}
Ну и для начала, можем написать внутри этого метода отрисовку линии. Для этого пишем:

g.drawLine(20, 20, 100, 100);


Теперь запускаем программу, и видим:

Даааааа, не густо…

Давайте отрисуем какую-нибудь картинку. Например эту:

 


Для начала, нам нужно указать путь к картинке. Для этого не в методе paint, пишем:

 

Imageimg = newImageIcon("2.png").getImage();


(предварительно надо в наш проект скинуть картинку и назвать ее 2.png)

После этого удаляем строчку отрисовки линии, а вместо нее в метод paint пишем:

g.drawImage(img, 0, 0, null);


Разберемся поближе с методом drawImage, так как мы будем часто его затрагивать.

drawImage(картинка которую мы будем рисовать, которую мы объявили раннее, координата X с которой будет рисоваться картинка, координата Y с которой будет рисоваться картинка, paint);

Отдельно хочу поговорить о параметре paint. Лучше всего оставляйте его null. Я только однажды сталкивался, когда мне нужно было использовать paint. Это было когда я отрисовывал текст, и задавал ему размер шрифта. Но советую не лезть туда и использовать null.

Теперь запускаем программу, и видим:

Чего-то она маленькая, не правда ли? Давайте научимся увеличивать её размеры. Добавляем к drawImage() параметры так, чтобы вышло:

g.drawImage(img, 0, 0, 1920, 1080, null);


Что мы сейчас добавили? Эти два параметра растягивают картинку, до координат 1920 и 1080. Получается, что картинка на весь экран. Давайте запустим программу и это проверим.

Получается:

Ну наконец-то. Теперь мы умеем любые картинки растягивать на весь экран. Но вот проблема. Метод paint вызывается только один раз. И как же его обновлять постоянно? Для этого существует очень полезная вещь — таймер. Давайте создадим его.

Для этого пишем:

 

Timertimer = newTimer(20, this);


(20 это частота с которой обновляется таймер, this- где выполнять метод при обновлении таймера
Это мы должны вписать сразу после строки определения класса, т.е. после:

 

publicclassMainextendsJPanel{
Также, надо дополнить строку определения класса таким образом:

public class Main extends JPanel implements ActionListener{


После прописывания этой строки, у вас название класса должно подчеркнуться красным. Чтобы это исправить, в самом конце класса добавьте метод:


@Override

           publicvoidactionPerformed(ActionEvent e) {

TODO Auto-generatedmethodstub

           }
Этот метод будет выполняться при обновлении таймера. В него мы должны написать repaint(); чтобы при каждом обновлении таймера у нас все элементы бы стирались, и нарисовывались заново.

Дальше, мы должны запустить таймер. Для этого, создаем конструктор класса Main и в него пишем:

timer.start();
После этого, можете не запускать программу, ведь в ней ничего не изменится. Давайте заменим текстуру домика на нормальную текстуру карты. Её вы можете нарисовать сами, либо скопировать у меня пробную:

Размер картинки может быть любой, все равно её размер будет подгоняться прямо в программе. Ах да, разрешения компьютеров могут быть разные, так что добавим-ка вконструктор такие вещи:

publicMain(JFrameframe) {

timer.start();

this.frame = frame;

}
И перед конструктором добавим:
JFrameframe;
И сходим еще в класс Display.java и там немного изменяем метод frame.add:

frame.add(newMain(frame));


Таким образом, наша рамка будет передаваться в класс Main.java. Переходим в этот класс, и там где у нас метод paint() меняем строку drawImage() на:


g.drawImage(img, 0, 0,frame.getWidth(), frame.getHeight(), null);


Таким образом, теперь наша игра будет отрисовывать картинку на весь экран, в независимости от его разрешения. Запускаем:

На сегодня все. Оставляю код, для тех, кто запутался:

 

Display.java

importjavax.swing.JFrame;

publicclassDisplay{

           publicstaticvoidmain(String[] args) {

                          JFrameframe = newJFrame("JustGame");

                          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                          frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

                          frame.setUndecorated(true);

                          frame.add(newMain(frame));

                          frame.setVisible(true);

           }             

}

Main.java

importjava.awt.Graphics;

importjava.awt.Image;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjavax.swing.ImageIcon;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

importjavax.swing.Timer;

public class Main extends JPanel implements ActionListener{

           Image img = new ImageIcon("2.png").getImage();

           Timer timer = new Timer(20, this);

           JFrameframe;

           publicMain(JFrameframe) {

                          this.frame = frame;

           }

           publicvoidpaint(Graphics g) {

                          g.drawImage(img, 0, 0,frame.getWidth(), frame.getHeight(), null);

           }

           @Override

           publicvoidactionPerformed(ActionEvent e) {


Дата добавления: 2018-06-27; просмотров: 225; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!