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

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

有沒有辦法從異步方法繪制到 JPanel 上?

有沒有辦法從異步方法繪制到 JPanel 上?

動(dòng)漫人物 2022-12-21 10:41:46
我正在使用 Swing 和 Firebase 編寫基于 Java 的游戲。我將所有玩家存儲(chǔ)在一個(gè)列表中,當(dāng)他們中的任何一個(gè)移動(dòng)時(shí),onChildChanged(...)回調(diào)(見下文)被觸發(fā)。由于這是異步的,我顯然不能設(shè)置任何超出函數(shù)范圍的變量。這一切都很好,直到我需要將這個(gè)播放器實(shí)際繪制到屏幕上。因?yàn)槲覕U(kuò)展了 aJPanel并覆蓋了它,所以paintComponent(Graphics g)我必須在這個(gè)方法中完成我的所有繪圖(或者至少這是我被告知的)。問題是我需要從回調(diào)內(nèi)部繪制這個(gè)玩家,這是我不知道該怎么做的。我試圖將Graphics g對(duì)象“導(dǎo)出”到全局變量,然后在異步函數(shù)中使用該變量,但這沒有產(chǎn)生任何結(jié)果。也許是因?yàn)樗鼘?shí)際上并沒有繪制到 JPanel 的畫布上?所以我有一個(gè)像這樣的類:class Screen extends JPanel {@Overridepublic void paintComponent(Graphics g) {    // All my painting stuff goes here}ref.addChildEventListener(new ChildEventListener() {            // This is the callback            @Override            public void onChildChanged(DataSnapshot snapshot, String previousChildName) {                      // Draw the player                }            }        });}編輯:忘記提及我也在調(diào)用repaint()每個(gè)游戲滴答聲(每秒 60 次)。我不知道這是否會(huì)改變?nèi)魏螙|西,但以防萬一:)所以我希望能夠在回調(diào)中繪制播放器或在paintComponent()方法中繪制播放器,我想知道如何做到這一點(diǎn)。謝謝!
查看完整描述

1 回答

?
湖上湖

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

除了在 paintComponent 方法內(nèi),你不應(yīng)該在任何地方繪畫。所以解決方案是:

  • 更新用于告訴 GUI 要繪制什么的模型字段。

  • 如果此更新將以任何其他方式直接影響 GUI,例如更新文本字段、標(biāo)簽、JTables 等,則應(yīng)在 EDT 上執(zhí)行此數(shù)據(jù)更改,方法是將其放入傳入的 Runnable 中的事件隊(duì)列中SwingUtilities.invokeLater(...)

  • 然后打電話repaint()

  • 然后 GUI 將使用這些字段并在 Swing 事件線程上完成所有繪制。

請(qǐng)注意,這repaint()是少數(shù)可以從 EDT 調(diào)用的 Swing 方法之一


雖然哈哈,但我對(duì)更新模型字段的意思有點(diǎn)困惑,你能澄清一下嗎?

如果您正在創(chuàng)建任何復(fù)雜的 GUI,您可能會(huì)使用模型 - 視圖類型的結(jié)構(gòu)(例如模型 - 視圖 - 控制器的 MVC),其中將程序邏輯(模型部分)與 GUI(視圖)分開。視圖描述了模型的狀態(tài)并允許用戶交互,所以我說的是狀態(tài)字段。

例如,如果你有一個(gè)帶有動(dòng)畫的游戲,模型將代表玩家的位置、玩家的狀態(tài)(生命值、武器、庫存)、他們的行為……而視圖將繪制所有這些基于關(guān)于模型的狀態(tài)。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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