Главная » Статьи » Игры на java

Анимация движения в играх

Первым делом объявляем необходимые переменные:

 private int i_anim;// счетчик кадров

 ArrayList <String> list =new ArrayList<String>();// коллекция типа строка

public String s; // строка адреса для анимированной картинки

В конструкторе заполняем коллекцию адресами картинок :

        list.add("anim/lsp0.png");
        list.add("anim/lsp1.png");
        list.add("anim/lsp2.png");
       list.add("anim/lsp3.png");
       list.add("anim/lsp4.png");
       list.add("anim/lsp5.png");
 

        i_anim = 0;// счетчик картинок

Создаем таймер который будет перебирать адреса картинок из коллекции:

 Timer timer2 = new Timer( 30, new ActionListener() { // скорость перебора 30мс -увеличивая замедлите анимацию

        public void actionPerformed(ActionEvent e) {
            f_anim++; // увеличиваем счетчик анимации
            s = f_list.get(f_anim);// получаем строку адреса картинки

            if (f_anim >= f_list.size()-1){
                f_anim = 0;// если список закончен - заново
                fist=false;
                timer2.stop();
            }

        }
    });

Запуск анимации:

timer2.start();

Код загрузки и отображения картинки:

 g.drawImage( new ImageIcon(s).getImage(), (int)x,(int) y, null);// рисуем

 

 

Скачать файл --- код файла

 

Код
 

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;

/**
 главный герой игры
 */
public class Player  {
    //  нач координаты и размер объекта
    private  double x;//координа х героя
    private  double y;//координа y героя
    private double w ; //ширина обьекта
    private double h ; // высота объекта

    private int speed;// скорость
    private Color color1;// цвет

    private double angl; // угол поворота
    private double distX;// разница по х от мышки
    private double distY;//
    private double dist;// расстояние от мышки


    // стаич прем - кавиши перемещения

    public static boolean up;
    public static boolean down;
    public static boolean left;
    public static boolean right;


    private int i_anim;// счетчик кадров
    //private Image img;
    ArrayList <String> r_list =new ArrayList<String>();// кол. картинок для анимации движ. вправо
    ArrayList <String> l_list =new ArrayList<String>();// кол. картинок для анимации движ. влево
    private String s; // строка адреса для анимированной картинки

    private double dx;// смещение
    private double dy;
    public static boolean isFiring;//стрельба
    public double health;// здоровье
    private int rech;// длин перезаряд
    private long timer_s = 0;// начальное время для таймера
    private long timer_f = 0;// конечное время
    private long timer_d = 1000;// (количество миллисекунд) длительность таймера

    //Image img = new ImageIcon("res/pl.png").getImage();//загрузка
    Image img1 = new ImageIcon("res/low_bat.png").getImage();//загрузка
    Image img3 = new ImageIcon("res/fon1.png").getImage();//загрузка картинки
    public Rectangle getRect() { // получение прямоугоьников
        return new Rectangle((int) x, (int) y, 58, 74); //возвращаем конструктор с размером объекта
    }

    // Constructor
    public Player(){
        x = GamePanel.WIDTH / 2;// нач координаты героя
        y = 400;
        w = 58;
        h = 74;

        speed = 5;
        color1 = Color.WHITE;
        health = 13;
        //  расстояние от мышки до пули
        angl= 0;
        // смещение
         dx = 0;
         dy = 0;
        // нач знач клавиш
        up = false;
        down = false;
        left = false;
        right = false;
        isFiring = false;
        rech=0;


        r_list.add("anim/sp1.png");
        r_list.add("anim/sp2.png");
        r_list.add("anim/sp3.png");
        r_list.add("anim/sp4.png");
        r_list.add("anim/sp5.png");
        r_list.add("anim/sp6.png");
        r_list.add("anim/sp7.png");
        r_list.add("anim/sp8.png");
        r_list.add("anim/sp9.png");
        r_list.add("anim/sp10.png");

// картинки влево

        l_list.add("anim/lsp1.png");
        l_list.add("anim/lsp2.png");
        l_list.add("anim/lsp3.png");
        l_list.add("anim/lsp4.png");
        l_list.add("anim/lsp5.png");
        l_list.add("anim/lsp6.png");
        l_list.add("anim/lsp7.png");
        l_list.add("anim/lsp8.png");
        l_list.add("anim/lsp9.png");
        l_list.add("anim/lsp10.png");

        i_anim = 0;// счетчик картинок
    }
    //  гетеры
    public double getX(){
        return  x;
    }
    public double getY(){
        return  y;
    }
    public double getW(){
        return  w;
    }
    public double getH(){
        return  h;
    }

    // - здоровья
    public void hit() {
        health--;

    }

    public   boolean timer_rech (){
        if (timer_s == 0) { //если таймер не запущен
            timer_s = System.currentTimeMillis();// получаем текущее время милсек
            timer_f = timer_s + timer_d; // конечное время трека
            timer1.start();// запуск таймера индикации перезарядки
            //GamePanel.a_norech.play();
            //GamePanel.a_norech.setVolume();
        }

            if(timer_f<=System.currentTimeMillis()) { //если время звучания меньше текущювремени
                timer_s=0;// обнуляем счетчик

                return true;
        }
             else return false;
    }

    Timer timer1 = new Timer(2, new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            rech=rech+2;//код который нужно выполнить каждую ед времени


            //rech=rech+40;//код который нужно выполнить каждую ед времени
            if(rech>=160){
                timer1.stop();
                GamePanel.a_norech.stop();
                //GamePanel.a_rech.sound();
                //GamePanel.a_rech.setVolume();
            }
        }
    });

    private void anim ( ArrayList <String> list){
         i_anim++; // увеличиваем счетчик анимации
         if (i_anim >=list.size()) i_anim = 0;// если список закончен - заново
         s = list.get(i_anim);// получаем строку адреса картинки
         }

    // обновления
    public void update(){
        if(!left && !right){
            i_anim = 0;// счетчик кадров = 0
            s ="res/pl.png";
        }
        distX =GamePanel.mouseX -x ;// разница по х от мышки
        distY =y - GamePanel.mouseY ;
        dist = (Math.sqrt(distX*distX + distY*distY));

        if (distX>0)  angl = Math.acos(distY/(Math.sqrt(distX*distX + distY*distY)));
        if (distX<0)  angl =- Math.acos(distY/(Math.sqrt(distX*distX + distY*distY)));


        if (health <=0){
            //killed = true;
            health = 0;}

        // смещение героя по игровому полю
        if (up && y >20){

            //GamePanel.a_fly.play(); GamePanel.a_fly.setVolume();
           // GamePanel.a_fly.timer_play ();
             y -= speed*10;
        }

        if (y<=400) y+= 10;
        if (y>400) y=400;

        if (down && y <GamePanel.HEIGHT -h){
            //GamePanel.a_fly.play(); GamePanel.a_fly.setVolume();
            //GamePanel.a_fly.timer_play ();
           // y += speed;
            s= "res/pl_d.png";// картинка присевшего человечека
        }
        if (left && x >0){
            x -= speed;

            anim(l_list);
            GamePanel.a_fly.play(); GamePanel.a_fly.setVolume();
            GamePanel.a_fly.timer_play ();

        }
        if (right && x <GamePanel.WIDTH -w){
            x += speed;

            anim(r_list);

            GamePanel.a_fly.play(); GamePanel.a_fly.setVolume();
            GamePanel.a_fly.timer_play ();

        }
        //if(up && left || up && right || down && left || down && right){
            //dy = dy * Math.sin(Math.toRadians(45));
            //dx = dx * Math.cos(Math.toRadians(45));
        //}
        y += dy;
        x += dx;

        dy = 0;
        dx = 0;


     

        if (isFiring == true && GamePanel.wave.magazine >0) { // если стрельба true
                if(timer_rech ()) {
                    GamePanel.bullets.add(new Bullet());//звук выстрела
                    GamePanel.a_bul.sound();// играть звук
                    GamePanel.a_bul.setVolume();//громкость
                    isFiring = false;//запрет для стрельбы
                    GamePanel.wave.magazine--; // опустошаем магазин при выстреле
                    rech = 0;
                    timer_rech ();

                }
        }
    }

    // отрисовка героя
    public void draw(Graphics2D g){

        Color bacColor = new Color(255, 0,0 );//созд обьект клсса цвет
        g.setColor(bacColor);// передаём цвет граф объекту
        g.fillRect(45, 5, 110, 20);//рисуем прямоугольную область
        g.fillRect(245, 5, 190, 20);//рисуем прямоугольную область
        g.fillRect(495, 5, 100, 20);//рисуем прямоугольную область


        g.drawImage(img1,750,3,null);//отрисовываем элемент в координатах
        Color batColor = new Color(5, 255,0 );//созд обьект клсса цвет
        g.setColor(batColor);// передаём цвет граф объекту
        g.fillRect(760, 7, (0 + rech), 23);//рисуем прямоугольную область

         g.setColor(Color.WHITE);//задаем цвет объекту Соlor
         Font font = new Font("Arial",Font.ITALIC,20);//Создём объект класса фонт (передаем в конструктор параметры)
         g.setFont(font);//устанвливаем наш шрифт
         ((Graphics2D) g).drawString("жизнь  "+(int)health ,50,22 );//отрисовываем строку
         ((Graphics2D) g).drawString(" патроны  "+ GamePanel.wave.magazine,250,22 );//отрисовываем строку
         ((Graphics2D) g).drawString(" враги "+ GamePanel.enemies.size(),500,22 );//отрисовываем строку

        g.drawImage( new ImageIcon(s).getImage(), (int)x,(int) y, null);// рисуем

        g.drawImage(img3, (int) 0, (int) 0, null);//отрисовываем элемент в координатах
     
    }

}

 

Категория: Игры на java | Добавил: kuzma (24.05.2017)
Просмотров: 2701 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar

Программирование игр на Python

Django - создание сайтов с нуля

Javascript - просто используем готовые решения