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

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

在運(yùn)行時(shí) JavaFX 中更改畫布顏色

在運(yùn)行時(shí) JavaFX 中更改畫布顏色

Qyouu 2023-09-27 16:09:30
所以我對(duì) javaFX 進(jìn)行了一些嘗試,因?yàn)樗俏业闹黝}之一的一部分。我有一個(gè)彈射器,可以向某個(gè)方向發(fā)射球。我想知道您是否可以在運(yùn)行時(shí)在特定情況下以某種方式改變畫布背景的顏色 - 例如,當(dāng)球撞到墻上時(shí)。我已經(jīng)弄清楚如何使球從墻上彈起,但我不知道如何在運(yùn)行時(shí)更改背景顏色。我正在使用 import javafx.scene.canvas.GraphicsContext; 因?yàn)檫@是我們“必須”合作的。我認(rèn)為這樣的東西會(huì)起作用,我發(fā)現(xiàn)了一些關(guān)于睡眠的線程,所以我嘗試了一下。public void flashCanvas() {try{    gc.setFill(Color.WHITESMOKE);    Thread.sleep(100);    gc.setFill(Color.BLACK);    Thread.sleep(100);}catch(InterruptedException ex){    Thread.currentThread().interrupt();    }}我以為這只會(huì)改變顏色,然后再等等。
查看完整描述

2 回答

?
肥皂起泡泡

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

簡(jiǎn)短回答

您可以使用這部分代碼做出您想要的行為


   Runnable collide = new Runnable() {

        @Override

        public void run() {

            Platform.runLater(() ->

                damageEffect()

            );

            try {

                Thread.sleep(1000);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

            Platform.runLater(() ->

                resetEffect()

            );

        }

    };

    new Thread(collide).start();


說明 您不能Thread.Sleep()在主線程上使用,這會(huì)導(dǎo)致您的 UI 凍結(jié),因此您需要在另一個(gè)線程上使用它,并且為了在更改 UI/主線程中的任何內(nèi)容時(shí)更安全,您應(yīng)該使用Platform.runLater()


您可以在這些函數(shù)中編寫任何效果boomEffect(),resetEffect() 如果您想更改畫布填充顏色,您可以在注釋中使用 @Barudar 提供的代碼,如下所示


private void resetEffect() {

    canvas.getGraphicsContext2D().setFill(Color.RED);

    canvas.getGraphicsContext2D().fillRect(0,0,canvas.getWidth(),canvas.getHeight());

}

其中fillRect()以startingX、startingY、endX、endY作為參數(shù)


查看完整回答
反對(duì) 回復(fù) 2023-09-27
?
Smart貓小萌

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

您正在阻止 JavaFX 應(yīng)用程序線程,從而Thread.sleep阻止呈現(xiàn)更改。(在您的代碼中實(shí)際上沒有任何變化,因?yàn)槟皇翘鎿Q了用于繪制的顏色,假設(shè)該顏色沒有在其他地方使用,但如果您除了修改屬性之外還繪制了某些內(nèi)容,則會(huì)發(fā)生這種情況fill。 )

javafx.animation我建議使用包中的一個(gè)類來更改此設(shè)置。

在這種情況下, aPauseTransition似乎是最簡(jiǎn)單的方法,但如果您想包含更新循環(huán),我建議使用AnimationTimerorTimeline代替,并將這種邏輯集成到更新“循環(huán)”中。使用后一種可能性,您可以簡(jiǎn)單地保存球上次撞墻的時(shí)間,并根據(jù)此信息決定使用哪種顏色來繪制背景。

使用示例PauseTransition

gc.setFill(Color.WHITESMOKE);

gc.fillRect(x, y, w, h);


// schedule update without blocking

PauseTransition pause = new PauseTransition(Duration.millis(100));

pause.setOnFinished(evt -> {

? ? gc.setFill(Color.BLACK);

? ? gc.fillRect(x, y, w, h);

});

pause.play();

請(qǐng)注意,您可能需要重繪的不僅僅是背景,因?yàn)?usingfillRect會(huì)替換矩形中當(dāng)前的所有內(nèi)容。


查看完整回答
反對(duì) 回復(fù) 2023-09-27
  • 2 回答
  • 0 關(guān)注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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