簡體   English   中英

Java Swing Sprite:如何模擬擲骰子

[英]Java Swing Sprite: how to simulate a rolling dice

在我們使用Java開發的游戲板上,我們希望在按下按鈕時顯示一種滾動骰子。 我們正在嘗試使用以下圖像作為精靈:

在此處輸入圖片說明

因此,當按下按鈕時,會發生以下情況:

private void startAnimationDie(final JPanel panel) {
    int launchResult =  /* getting a launch dice result from the core game (from 1 to 6)*/

    new Thread() {
        public void run() {
            try {
                SwingUtilities.invokeAndWait(new Runnable() { 
                    public void run() {
                        BufferedImage[] animationBuffer = initAnimationBuffer();
                        BufferedImage[][] exactDieFaces = initExactDieFaces();
                        int launchResult = coreGame.launchDie();
                        coreGame.getMyPartecipant().setLastLaunch(launchResult);
                        AnimationSprite animation = new AnimationSprite(animationBuffer, Constants.DIE_ANIMATION_SPEED);
                        animation.start();
                        JLabel resultDie = new JLabel();
                        resultDie.setBounds(60, 265, Constants.DIE_SIZE, Constants.DIE_SIZE);
                        for (int counter = 0; counter < Constants.DIE_ANIMATION_SPEED * 100; counter++) {
                            animation.update();
                            //panel.removeAll();
                            panel.updateUI();
                            //System.out.println("infor");
                            resultDie.setIcon(new ImageIcon(animationBuffer[counter % Constants.ROTATIONS]));
                            panel.add(resultDie);
                            panel.updateUI();
                            updateUI();

                        }   
                        panel.removeAll();
                        panel.updateUI();
                        AnimationSprite resultAnimation = new AnimationSprite(exactDieFaces[launchResult - 1], 6);
                        resultAnimation.start();
                        resultAnimation.update();
                        System.out.println("0");
                        resultDie.setIcon(new ImageIcon(exactDieFaces[launchResult - 1][0]));
                        System.out.println("1");
                        resultDie.setBounds(60, 265, Constants.DIE_SIZE, Constants.DIE_SIZE);
                        System.out.println("2");
                        panel.add(resultDie);
                        try {
                            Thread.sleep(200);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        userPlayer.getGamePanel().makePossibleMoveFlash();
                    }
                });
            } catch (Exception ex) {
            }
        }
    }.start();

其中exactDieFaces根據啟動的棋子顏色包含骰子面,並且在模擬滾動完成后將顯示該面; 另一方面,animationBuffer包含40或50個從子畫面圖像中獲取的所有顏色的隨機面,如下所示:

private BufferedImage[] initAnimationBuffer() {
    BufferedImage[] result = new BufferedImage[Constants.ROTATIONS];
    int rowSprite, colSprite;
    Random random = new Random();
    for (int i = 0; i < Constants.ROTATIONS; i++) {
        rowSprite = 1 + random.nextInt(5);
        colSprite = 1 + random.nextInt(5);
        result[i] = DieSprite.getSpriteExact(0 /* offset */,colSprite, rowSprite);
    }
    return result;
}

問題是動畫期間什么也沒顯示:我希望看到許多骰子面一個接一個地變化,直到for循環結束,但什么也沒顯示...我唯一看到的是根據顏色pawn的啟動結果,已經死了,但與此同時...什么都可以...你能幫我嗎?

如果我正確理解您的代碼,則您正在同一for循環中嘗試多次更新UI。 那不是動畫的工作原理。 您需要一個計時器,該計時器會定期通知您移至下一幀進行查看。

Java教程在這里是開始了解如何使用計時器的好地方。

暫無
暫無

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

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