2015-11-06 49 views
0

我正在使用球拍的程序,我需要能夠實質上繪製一些東西,並能夠改變繪圖的視覺播放連接4 ..現在我可以管理的最接近的是要麼創建每次改變一個新窗口。爲了使代碼不會令人難以置信,我只是使用一個例子。方案/球拍,我在哪裏可以找到直流?

(require racket/gui/base) 
(require racket/draw) 
(define frame (new frame% 
       [label "Connect 4 Visual Window"] 
       [width 800] 
       [height 600])) 

canvas (new canvas% [parent frame] 
     [paint-callback 
      (lambda (canvas dc) 
      (send dc set-scale 3 3) 
      (send dc set-text-foreground "Black") 
      (send dc draw-text "Welcome to Connect 4!" 50 0) 
(send dc draw-rectangle 
    30 30 
    200 145) 
)]) 
(send frame show #t) 

所以我想這樣做,然後我需要能夠改變什麼已經存在,無法刪除畫布,而不是關閉窗口,使一個新的,改變它,刷新圖像。我一直看到看起來像我可以做的那些功能,但所有這些都需要我通過「dc」,並且我不知道我應該怎樣才能讓它達到

回答

2

如果你想在Racket上寫一個簡單的互動遊戲,我會推薦使用2htdp/universe2htdp/image庫。您可以給big-bang表單一些高級事件處理程序(用於鍵盤和鼠標輸入以及時間傳遞)以及將世界渲染爲圖像的函數。該庫處理創建窗口和畫布並將它們連接到事件處理程序。對於渲染功能,不是發佈繪圖命令,而是使用運算符(如bitmaprectangle)製作基本圖像,然後使用像place-image這樣的運算符進行組合。

2htdp/universe文檔在示例中有點短,因爲它們大多在教科書How to Design Programs, 2nd ed(可在線閱讀)中。序言和第1部分將給你一個例子的介紹big-bang


如果你想這樣做硬盤的方式,你會得到一個dc說法,dc<%>接口的實例,作爲參數傳遞給您的油漆回調函數。要更新畫布,請將某些可見狀態更改爲您的paint-callback函數(例如,使用全局變量和set!),然後調用畫布的refresh方法(從window<%>繼承)。畫布將清除,然後使用您給它的paint-callback函數重繪自己。該功能應根據所看到的新狀態繪製不同的內容。嘗試在paint-callback函數之外繪製畫布可能是一個糟糕的主意。

+0

非常感謝你,那正是我想要的。 – soulxreaperx366

+0

如果你喜歡這個答案,請點擊答案旁邊的複選標記,給Ryan信貸一個正確的答案! –

相關問題