首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SDL2和Lisp的多个图形窗口?

使用SDL2和Lisp的多个图形窗口?
EN

Stack Overflow用户
提问于 2016-04-21 01:25:12
回答 1查看 750关注 0票数 4

我正在尝试使用cl-sdl2 2Clozure通用Lisp (在MS上,虽然我认为它应该像在其他平台和编译器上那样工作)来绘制到两个单独的图形窗口。当我尝试下面的代码时:

代码语言:javascript
复制
(ql:quickload "sdl2")
(require :sdl2)

(defun make-two-SDL-2-windows ()
  (let* ((win1 (sdl2:create-window :title "Win 1" :w 400 :h 400))
         (ren1 (sdl2:create-renderer win1))
         (win2 (sdl2:create-window :title "Win 2" :w 300 :h 300))
         (ren2 (sdl2:create-renderer win2)))
    (sdl2:with-event-loop (:method :poll)
      (:keyup
        (:keysym keysym)
        (when (sdl2:scancode= (sdl2:scancode-value keysym) :scancode-escape)
           (sdl2:push-event :quit)))
      (:idle ()
        (progn
          (sdl2:render-present ren1)
          (sdl2:render-present ren2)))
      (:quit () 
        (progn 
          (sdl2:destroy-renderer ren1)
          (sdl2:destroy-renderer ren2)
          (sdl2:destroy-window win1)
          (sdl2:destroy-window win2)
          t)))))

(defun main ()
  (sdl2:init :everything)
  ;;;Clozure...
  (process-run-function "window" #'make-two-SDL-2-windows))

(main)

新窗口的...both创建了“挂起”,不响应/重绘按键或鼠标移动。我试图将这个片段建立在我在SDL2实例中发现的基础上。我一定误解了如何为事件循环使用cl-sdl2 2包装器,或者类似的东西。是否有人成功地在通用Lisp中使用了多个窗口和SDL2?

这是一个有用的版本,感谢Rei的帮助:

代码语言:javascript
复制
(defun make-two-SDL-2-windows ()
  (sdl2:with-init (:everything)
    (sdl2:with-window (win1 :title "Win1" :flags '(:shown))
      (sdl2:with-window (win2 :title "Win2" :flags '(:shown))
        (sdl2:with-renderer (ren1 win1 :flags '(:renderer-accelerated))
          (sdl2:with-renderer (ren2 win2 :flags '(:renderer-accelerated))
             (sdl2:with-event-loop (:method :poll)
               (:keyup
                 (:keysym keysym)
                   (when (sdl2:scancode= (sdl2:scancode-value keysym)  :scancode-escape)
                      (sdl2:push-event :quit)))
                 (:idle
                   ()
                   (progn
                     (sdl2:set-render-draw-color ren1 0 0 255 255)
                     (sdl2:set-render-draw-color ren2 0 255 0 255)
                     (sdl2:render-draw-line ren1 150 20 100 300)
                     (sdl2:render-draw-line ren2 20 20 150 150)
                     (sdl2:render-present ren1)
                     (sdl2:render-present ren2)))
                 (:quit () t))))))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-22 02:22:47

您定义了两个窗口和呈现器,而没有在事件循环中实际使用它们;使用sdl2 2:with-renderer和sdl2 2:with-window绑定它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36757970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档