Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите, на верном ли я пути? Игровые анимации в JAVA 
V
    Опции темы
newinjava
Дата 1.5.2012, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ATokS
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



Здравствуйте,
я уже задавал этот вопрос на другом форуме, но там молчат. А мне ну очень охота 
бросить на общий суд свой ход мыслей по поводу игровой анимации в JAVA.

Я решил для начало поиграться на Swing'овских панелях. Суть проста и стара как мир: создание объекта анимации для ПРОСТЫХ игр.
В интернете полно примеров, но мне охота услышать рассматривается ли-то, что мне в голову пришло как вариант анимации или нет.
Если нет, то почему?

Три класса:
1 - Стартавый
Код
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;


public class Start {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(null);
        f.setSize(650,650);
        
        int rep = 100;
        final Animation a = new Animation();
        a.addPart(new ImageIcon("src/1.png").getImage(), rep);
        a.addPart(new ImageIcon("src/2.png").getImage(), 10);
        a.addPart(new ImageIcon("src/3.png").getImage(), rep);
        a.addPart(new ImageIcon("src/4.png").getImage(), 10);
        a.addPart(new ImageIcon("src/5.png").getImage(), rep);
        a.addPart(new ImageIcon("src/4.png").getImage(), 10);
        a.addPart(new ImageIcon("src/3.png").getImage(), rep);
        a.addPart(new ImageIcon("src/2.png").getImage(), 10);
        
        final PaintPanel p = new PaintPanel();
        p.setBorder(BorderFactory.createLineBorder(Color.black));
        p.setLayout(null);
        p.setBounds(10,10,600,600);
        a.setBounds(0,0,100,100);
        p.add(a);
        f.add(p);

        p.addMouseMotionListener(new MouseMotionListener(){
            public void mouseDragged(MouseEvent arg0) {
                a.setLocation(arg0.getX()-50, arg0.getY()-50);
            }
            public void mouseMoved(MouseEvent arg0) {}
        });
        
        for(int i=0; i<600; i+=100){
            for(int j=0; j<600; j+=100){
                if(i!=0 || j!=0){
                    Animation a1 = new Animation();
                    a1.addPart(new ImageIcon("src/1.png").getImage(), rep);
                    a1.addPart(new ImageIcon("src/2.png").getImage(), rep);
                    a1.addPart(new ImageIcon("src/3.png").getImage(), rep);
                    a1.addPart(new ImageIcon("src/4.png").getImage(), rep);
                    a1.addPart(new ImageIcon("src/5.png").getImage(), rep);
                    a1.setBounds(i,j,100,100);
                    p.add(a1);
                }
            }
        }
        
        f.setVisible(true);

    }

}


2- Анимашка
Код
import java.awt.Graphics;
import java.awt.Image;
import java.util.ArrayList;

import javax.swing.JPanel;

public class Animation extends JPanel{
    private static final long serialVersionUID = 1L;
    
    private ArrayList<Part> parts = new ArrayList<Part>();
    private long curTime    = System.currentTimeMillis();
    private int currentPart = 0;
    
    public Animation(){
        this.setOpaque(false);
    }

    /**
     * Дабавляет сцену
     * @param img    Картинка сцены
     * @param time    Длительность показа сцены
     */
    public void addPart(Image img, long time){
        parts.add(new Part(img, time));
    }
    
    /** 
     * @return Возвращает актуальную по времени картинку
     */
    private Image getImage(){
        if(parts.size() == 1){
            currentPart    = 0;
            return parts.get(currentPart).img;
        }else if(parts.size() > 1){
            if((curTime + parts.get(currentPart).time)<=System.currentTimeMillis()){
                currentPart++;
                if(currentPart == parts.size()){
                    currentPart = 0;
                }
                curTime = System.currentTimeMillis();
            }
            return parts.get(currentPart).img;
        }
        return null;
    }
    
    public void paint(Graphics g){
        super.paint(g);
        g.drawImage(getImage(), 0, 0, null);
    }
    
    /**
     * Вспомогательный класс
     *
     */
    private class Part{
        Image    img;    // Картинка сцены
        long    time;    // Длительность показа сцены
        
        public Part(Image img, long time){
            this.img    = img;
            this.time    = time;
        }
    }
}


3- проигрователь анимаций
Код
import javax.swing.JPanel;

public class PaintPanel extends JPanel{
    private static final long serialVersionUID = 1L;
    
    /**
     * Панэль на каторую добавляются анимашки
     */
    public PaintPanel(){
        /**
         * Трэд для перересовки анимашек
         */
        new Thread(){
            public void run(){
                while(true){
                    repaint(); // Обнавить "перересовать" панэль полностью
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {}
                }
            }
        }.start();
    }
}



Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  a.zip 10,60 Kb
PM WWW   Вверх
mstalker26
Дата 1.5.2012, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 4.7.2009

Репутация: 4
Всего: 11



Цитата(newinjava @ 1.5.2012,  12:12)
...
но мне охота услышать рассматривается ли-то, что мне в голову пришло как вариант анимации или нет.
...

То, что Вам пришло в голову, называется спрайтовая анимация. Для простых (2D) игр, Вам хватит её за глаза.

На этих сайтах достаточно информации для программирования игр  smile 
http://www.gamedev.net
http://www.gamedev.ru
--------------------
Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
PM   Вверх
newinjava
Дата 2.5.2012, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ATokS
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



Спасибочки за ответ. smile 
Значит идея имеет право на жизнь. smile 
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0838 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.