簡體   English   中英

如何停止JApplet中的運動圖像閃爍

[英]How to stop moving image in a JApplet from flickering

我設法創建了一個(基本的)動畫JApplet,這是3年以來的第一次,但是當圖像移動時,圖像閃爍使我感到煩惱。 Timer對象使圖像移動,而我的私有內部類“ TimerListener”負責運動圖像的動畫運動。

這是我的TimerListener類的代碼,我認為可以解決此問題:

@Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(smileyFace.getImage(), xCoord, yCoord, this);
    }

    private class TimerListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            //Following if-else manipulates Y coordinate
            if (goingUp) {
                if (yCoord > minY) {
                    yCoord -= move;
                } 
                else {
                    goingUp = false;
                }
            } else {
                if (yCoord < (getContentPane().getHeight() - (smileyFace.getIconHeight()+ Y_OFFSET))) {
                    yCoord += move;
                } 
                else {
                    goingUp = true;
                }
            }

            //Following if-else manipulates X coordinate
            if (goingSideways) {
                if (xCoord > 0) {
                    xCoord -= move;
                } 
                else {
                    goingSideways = false;
                }
            } else {
                if (xCoord < (getContentPane().getWidth() - (smileyFace.getIconWidth() + X_OFFSET))) {
                    xCoord += move;
                } 
                else {
                    goingSideways = true;
                }
            }

            repaint();
        }
    }

如果有幫助,這是我的JApplet的屏幕截圖-在這種情況下,巨魔的臉應該在黑色區域中移動,並在擊中側面時從側面彈起:

在此處輸入圖片說明

對於那些想要運行和測試JApplet的人,可以從https://github.com/rattfieldnz/Java_Projects/tree/master/JAppletAnimation獲得Netbeans項目。

感謝用戶“ arynaq”,我解決了我的問題。 我把下面的繪畫方法:

@Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(smileyFace.getImage(), xCoord, yCoord, this);
    }

...進入擴展JPanel的內部類(注意我如何將“ paint”更改為“ paintComponent”):

class ImagePanel extends JPanel
    {

        public ImagePanel()
        {
            setBackground(Color.BLACK);
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(smileyFace.getImage(), xCoord, yCoord, this);
        }

        @Override
        public void setBackground(Color bg) {
            super.setBackground(bg); //To change body of generated methods, choose Tools | Templates.
        }


    }

...然后通過它的init()方法將其添加到我的JApplet中(通過將其稱為JApplet的構造函數,我不確定是否正確):

@Override
public void init() {

    smileyFace = new ImageIcon("images/happyFace.png");
    **add(new ImagePanel());**
    timerDelay = 10;
    timer = new Timer(timerDelay, new TimerListener());
    timer.start();

    //getContentPane().setBounds(0, 0, CONTENTPANE_WIDTH, CONTENTPANE_HEIGHT);
    getContentPane().setBackground(Color.BLACK);

    //maxY = getContentPane().getHeight();
    minY = 0;

    xCoord = 0;
    yCoord = 0;
    move = 2;

}

通過克隆我的GitHub JApplet項目並在NetBeans中運行它,您可以看到它正在運行:)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM