Главная » Статьи » Игры на java |
Первая игра на Java (часть-2)
Вводим класс обработчика событий клавиатуры - по умолчанию все методы пустые (нужные активируем сами). package jgames1; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; /** * Created by nikelen on 2017-01-29. */ public class Road extends JPanel implements ActionListener { // класс дорога помещаем на панель Timer mainTimer = new Timer(20,this);// Таймер(класс) будет каждые 20мс запускать функцию actionPerformed(this) Image img = new ImageIcon("res/dor.jpg").getImage();//загрузка картинки дороги Player p = new Player();// инициализ класс плеер public Road(){// конструктор mainTimer.start();// запуск Таймера addKeyListener(new MyKeyAdapter()); // добавляем обработчик соб. клавиатуры setFocusable(true); //делаем дорогу в фокусе(для нажатия клавиш) } private class MyKeyAdapter extends KeyAdapter {// наследуем класс обработчик, в котором все методы пустые(реализуем нужные) public void keyPressed(KeyEvent e){ // перегружаем метод нажатия клавиши p.keyPressed(e); // вызов метода keyPressed для рlayer } public void keyReleased(KeyEvent e){ // перегружаем метод отпускания клавиши p.keyReleased(e); // вызов метода для рlayer } } public void paint(Graphics g) { // метод перерисовывает панель g = (Graphics2D) g;// приведение типов(рисует Graphics2D) g.drawImage(img, p.layer1, 0, null); //рисуем(что,x-слой1 и у не изменяем,...) g.drawImage(img, p.layer2, 0, null); g.drawImage(p.img, p.x, p.y, null);//рисуем(для плеер метод имж,х-плеер и у-плеер,...) } public void actionPerformed(ActionEvent e){ p.move(); //плеер перемещается(метод player) repaint(); //перересовывет всё } } -------------------------------------------------------- ------------------------------------------------------ package jgames1; import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; /** * Created by nikelen on 2017-01-29. */ public class Player { Image img = new ImageIcon("res/f_l1.png").getImage();//загрузка картинки int v = 4; // скорость int dv = 0; // ускорение int s = 0; //путь int x = 30; // нач координаты int y = 100; int layer1 = 0; // первый слой(дорога) int layer2 = 1200; public void move() { // метод движения s+= v; // путь увеличивается if (layer2 -v <= 0){ layer1 = 0; layer2 = 1200; } else{ layer1 -= v;//слой уменьется layer2 -= v; } } public void keyPressed(KeyEvent e){ //метод обработки события нажатие клавиши JOptionPane.showMessageDialog(null, "key pressed"); } public void keyReleased(KeyEvent e){ //метод обработки события отуск клавиши JOptionPane.showMessageDialog(null, "key pressed");; } } ############################################################ Перемещение машины право-лево , с ограничениями по скорости и направлениям package jgames1; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; /** * Created by nikelen on 2017-01-29. */ public class Road extends JPanel implements ActionListener { // класс дорога помещаем на панель Timer mainTimer = new Timer(20,this);// Таймер(класс) будет каждые 20мс запускать какую то функцию actionPerformed(this) Image img = new ImageIcon("res/dor.jpg").getImage();//загрузка картинки дороги Player p = new Player();// инициализ класс плеер public Road(){// конструктор mainTimer.start(); //запуск Таймера addKeyListener(new MyKeyAdapter()); // добавляем обработчик соб. клавиатуры setFocusable(true);//делаем дорогу в фокусе (для нажатия клавиш) } private class MyKeyAdapter extends KeyAdapter {// наследуем класс обработчик, в котором все методы пустые(реализуем нужные) public void keyPressed(KeyEvent e){ // перегружаем метод нажатия клавиши p.keyPressed(e); // вызов метода keyPressed для рlayer } public void keyReleased(KeyEvent e){ // перегружаем метод отпускания клавиши p.keyReleased(e); // вызов метода для рlayer } } public void paint(Graphics g) { // метод перерисовывает панель g = (Graphics2D) g;// приведение типов(рисует Graphics2D) g.drawImage(img, p.layer1, 0, null); //рисуем(что,x-слой1 и у не изменяем,...) g.drawImage(img, p.layer2, 0, null); g.drawImage(p.img, p.x, p.y, null);//рисуем(для плеер метод имж,х-плеер и у-плеер,...) } public void actionPerformed(ActionEvent e){ p.move(); //плеер перемещается repaint(); //перересовывет всё } } ------------------------------------------------ ------------------------------------------------------------- package jgames1; import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; /** * Created by nikelen on 2017-01-29. */ public class Player { public static final int MAX_V = 50; //мах ускорение public static final int MAX_TOP = 10;// мах верх положение public static final int MAX_BOTTOM = 480;// мах нижнее положение Image img = new ImageIcon("res/f_l1.png").getImage();//загрузка картинки int v = 0; // скорость int dv = 0; // ускорение int s = 0; //путь int x = 30; // нач координаты int y = 100; int dy = 0; int layer1 = 0; // первый слой(дорога) int layer2 = 1200; public void move() { // метод движения s+= v; // путь увеличивается v +=dv;// скорость увеличивается if (v <= 0) v = 0;//если скорость =0 if (v>= MAX_V) v = MAX_V;// если скорость болье мах y-=dy;// изменение координаты у(зависит от поворота) if (y<= MAX_TOP) y = MAX_TOP;// верхняя граница if (y>= MAX_BOTTOM) y = MAX_BOTTOM;// нижняя граница if (layer2 -v <= 0){// цикл показа слоёв дороги layer1 = 0; layer2 = 1200; } else{ layer1 -= v;//слой уменьется layer2 -= v; } } public void keyPressed(KeyEvent e){ //метод обработки события нажатие клавиши int key = e.getKeyCode();//получаем код нажатой клавиши if (key == KeyEvent.VK_RIGHT) {// если курс влево dv = 5; //ускорение + } if (key == KeyEvent.VK_LEFT) {// если курс влево dv = -5; //ускорение - } if (key == KeyEvent.VK_UP) {// если курс вверх dy = 10; //поворот + } if (key == KeyEvent.VK_DOWN) {// если курс вниз dy = -10; //поворот - } } public void keyReleased(KeyEvent e) { //метод обработки события отуск клавиши int key = e.getKeyCode();//получаем код нажатой клавиши if (key == KeyEvent.VK_RIGHT || key == KeyEvent.VK_LEFT) {// если курс влево dv = 0; //ускорение 0 } if (key == KeyEvent.VK_UP || key == KeyEvent.VK_DOWN) {// если курс влево dy = 0; //ускорение 0 } } } ############################################################################### | |
Просмотров: 447 | |
Всего комментариев: 0 | |