第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

drawImage() 拒絕繪制在方法外部實(shí)例化的圖像

drawImage() 拒絕繪制在方法外部實(shí)例化的圖像

qq_遁去的一_1 2022-12-15 16:44:00
我目前正在嘗試將圖像打印到屏幕上以準(zhǔn)備創(chuàng)建游戲。我可以自己顯示圖像,但前提是圖像在paintComponents()類中實(shí)例化。我,當(dāng)然,不想每一幀都重新實(shí)例化整個(gè)板,但似乎無法讓它工作。我將如何做到這一點(diǎn)?我試圖在類范圍內(nèi)聲明一個(gè)圖像并在類的構(gòu)造函數(shù)中實(shí)例化它。但是,一旦我嘗試打電話drawImage(),圖像就拒絕顯示。一旦我將它實(shí)例化,這個(gè)問題就消失了printComponents()。我曾嘗試(輕微地)使用 JLabel 和 JIcon,但運(yùn)氣不佳。特別是因?yàn)槲也荒軐?drawImage 與 JLabel 一起使用。這是行不通的:public class Skeleton extends JPanel{    BufferedImage img = null;    public Skeleton()    {        try{            img = ImageIO.read(new File(myFile.png));        } catch (IOException e){            System.out.println("Loading failed.");        }        while(true)        {            repaint();        }    }    public paintComponents(Graphics g)    {        g.drawImage(img, 50, 50, null);    }   }這確實(shí)有效:public class Skeleton extends JPanel{    public Skeleton()    {        while(true)        {            repaint();        }    }    public paintComponents(Graphics g)    {        BufferedImage img = null;        try{            img = ImageIO.read(new File(myFile.png));        } catch (IOException e){            System.out.println("Loading failed.");        }        g.drawImage(img, 50, 50, null);    }   }我想最終創(chuàng)建一個(gè)包含預(yù)加載圖像的 Tile 對象的雙數(shù)組,就像myFile.png我可以調(diào)用打印的那樣g.drawImage(tiles[1][1].getTexture(), 50, 50, null);加載我的文件是有效的,因?yàn)槲覐牟粧伋霎惓2⑶掖a在paintComponents. 我錯(cuò)過了什么?
查看完整描述

1 回答

?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊

好吧,我會(huì)做兩件不同的事情:首先,我測試了兩個(gè)版本,但都對我不起作用。我想這可能是由您在構(gòu)造函數(shù)中創(chuàng)建的無限循環(huán)引起的,因?yàn)樗肋h(yuǎn)不會(huì)退出。


除此之外,您的 paintMethod 似乎有錯(cuò)誤(實(shí)際上應(yīng)該是繪制并覆蓋 JPanel 中的 super 方法),您需要對更新進(jìn)行更改。我建議您看一下“Game-Loops”,盡管它也可以為每個(gè)實(shí)例使用單獨(dú)的線程,但我建議不要這樣做。我更正了您的代碼,以便您可以查看它:具有單獨(dú)線程的第一個(gè)版本:


package stackoverflowtests;


import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;


import javax.imageio.ImageIO;

import javax.swing.JPanel;


public class Skeleton extends JPanel implements Runnable {


    private BufferedImage img = null;


    public Skeleton() {

        setSize(1000, 500);

        try {

            img = ImageIO.read(new File("index.jpg"));

        } catch (IOException e) {

            System.out.println("Loading failed.");

        }

    }


    public void paint(Graphics g) {

        g.drawImage(img, 50, 50, null);

    }


    @Override

    public void run() {

        while (true) repaint();

    }


}

主要是這樣的:


package stackoverflowtests;


import javax.swing.JFrame;


public class Main extends JFrame {


    public Main() {

        setSize(1280, 720);

        setLocationRelativeTo(null);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Skeleton skeli = new Skeleton();

        skeli.setLocation(0, 0);

        skeli.setSize(1000, 500);

        add(skeli);

        new Thread(skeli).start();

        setVisible(true);

    }


    public static void main(String[] args) {

        Main main = new Main();


    }

}

游戲循環(huán)的可能性 2:


package stackoverflowtests;


import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;


import javax.imageio.ImageIO;

import javax.swing.JPanel;


public class Skeleton extends JPanel {


    private BufferedImage img = null;


    public Skeleton() {

        setSize(1000, 500);

        try {

            img = ImageIO.read(new File("index.jpg"));

        } catch (IOException e) {

            System.out.println("Loading failed.");

        }

    }


    public void paint(Graphics g) {

        g.drawImage(img, 50, 50, null);

    }


}

主要是:


package stackoverflowtests;


import javax.swing.JFrame;


public class Main extends JFrame {


    public Main() {

        setSize(1280, 720);

        setLocationRelativeTo(null);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Skeleton skeli = new Skeleton();

        skeli.setLocation(0, 0);

        skeli.setSize(1000, 500);

        add(skeli);

        setVisible(true);

    }


    public static void main(String[] args) {

        Main main = new Main();


        // Gameloop

        long lastTime = System.nanoTime();

        double amountOfTicks = 60.0;

        double ns = 1000000000 / amountOfTicks;

        double delta = 0;

        long timer = System.currentTimeMillis();

        int frames = 0;

        while (true) {

            long now = System.nanoTime();

            delta += (now - lastTime) / ns;

            lastTime = now;

            while (delta >= 1) {

                // updates++;

                delta--;

            }

            System.out.println("repaint");

            main.repaint();

            frames++;

        }

    }

}

您需要問自己的第二件事是,您是否可以為每個(gè)實(shí)體使用 BufferedImage 對象而不是整個(gè) JPanel ;)


查看完整回答
反對 回復(fù) 2022-12-15
  • 1 回答
  • 0 關(guān)注
  • 106 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號