※ 引述《tatibana31 (橘三十一)》之銘言:
: ※ 引述《tatibana31 (橘三十一)》之銘言:
: 除了H45大大提供的方法,今早失眠時,想到的方法也有效,至少沒問題了。
: (但是我的程式卻被遞迴給毀了,結果procedure()這一段重寫)
: 我多加了一個變數
: public long previousTime;
: public void procedure()
: {
: if(computer){
: Action_A(); Action_B(); Drawing();
: computer = false;
: procedure();
: }else if(!computer){
: Action_A(); mouseControl = true;
: }
: }
: 滑鼠的程式碼為:
: public void mouseClicked(mouseEvent m)
: {
: if(mouseControll &&
: System.currentTimeMillis() - previousTime > 500){
: Action_B(); Drawing(); mouseControll = false;
: previousTime = System.currentTimeMillis();
: computer = true;
: procedure();
: }
: }
: 這樣就解了....害我想了一整晚..找了一整晚的蟲....(至少測試到現在都沒問題)
: 500那個數字,或許可以再低一點....
你這個程式的問題不只是處理滑鼠方面而已。
如果你的程式設計如同 H45 形容的那樣:你讓 time consuming task(比如電腦在
計算下一步棋)執行在 event-dispatching thread,那麼這個程式在 computer turn
時,程式中的圖形元件任一部份被其他東西遮蔽過後,都會沒有辦法復原外觀,得
等到電腦計算完棋步(假設是棋奕遊戲)並走完棋子後,才能夠補上遺失的外觀。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.137.130