0

ライブラリを使用せず、純粋なJavaのみを使用して、ポケモンスタイルの2D Javaゲームを作成しています。水タイルをアニメーション化することに取り組んでおり、問題が発生しています。タイルを 0.5 秒ごとに更新したい。メイン クラス、抽象タイル クラス、水クラス、および画面クラスを投稿して、ゲームでタイルをアニメーション化する方法を見つけられるようにします。

PS: 現在、水のタイルをアニメーション化しようとしています。また、すべてのスプライトはテスト用であり、後で変更されます。

DropBox のコード: AnimatedTileMainScreenTile

4

2 に答える 2

0

アニメーションウォーターアニメーションウォーターアニメーションウォーターアニメーションウォーターアニメーションウォーターアニメーションウォーターアニメーションウォーターアニメーションウォーターアニメーションウォーターアニメーションウォーターアニメーションウォーター

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;

class AnimatedWater {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                final JPanel gui = new JPanel(new GridLayout(2,0,0,0));

                final AnimatedTile[] tiles = new AnimatedTile[8];
                for (int ii=0; ii<tiles.length; ii++) {
                    tiles[ii] = new AnimatedTile();
                    gui.add(new JLabel(new ImageIcon(tiles[ii])));
                }
                ActionListener listener = new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        for (int ii=0; ii<tiles.length; ii++) {
                            tiles[ii].paintImage();
                            gui.repaint();
                        }
                    }
                };
                Timer timer = new Timer(50, listener);
                timer.start();

                JOptionPane.showMessageDialog(null, gui);
                timer.stop();
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}

class AnimatedTile extends BufferedImage {

    GradientPaint[] frameGradient;
    int frame = 0;

    AnimatedTile() {
        super(60,60,BufferedImage.TYPE_INT_RGB);
        frameGradient = new GradientPaint[6];
        for (int ii=0; ii<frameGradient.length; ii++) {
            frameGradient[ii] = new GradientPaint(
                    0f,(float)ii,Color.BLUE, 
                    0f,(float)ii+3,Color.CYAN,true);
        }
    }

    public void paintImage() {
        Graphics2D g = createGraphics();
        if (frame==frameGradient.length-1) frame = 0;
        else frame++;
        g.setPaint(frameGradient[frame]);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.dispose();
    }
}
于 2013-07-27T03:43:21.147 に答える
0

アニメーションのチュートリアルを他のアニメーションの質問に投稿しましたが、他の人はそれほど気に入っていないようです. 多分あなたはそれがもっと便利だと思うでしょう、私は java.awt だけを使いました。画像をアニメーション化する方法に関する実用的な例があります。私の方法では、アニメーション化する画像のすべてのタイルが 1 つの長い画像に含まれており、読み込まれるバッファの部分の X 座標を更新することで、フレームをスクロールしてアニメーションを実現できます。

お楽しみください: https://sites.google.com/site/javagamescorner/home/animated-sprites

于 2013-07-27T02:03:20.173 に答える