【问题标题】:lispbuilder-sdl doesn't work on osx due to sdl_delay由于 sdl_delay,lispbuilder-sdl 在 osx 上不起作用
【发布时间】:2016-07-17 06:08:17
【问题描述】:

我的操作系统是 OS X 10.11.5,代码用 emacs+slime+sbcl
我使用命令加载了 lispbuilder-sdl:

(asdf:operate 'asdf:load-op :cocoahelper)
(asdf:operate 'asdf:load-op :lispbuilder-sdl)

然后复制here上的示例代码

(sdl:with-init ()
  (sdl:window 320 240)
  (sdl:update-display)
  (sdl:with-events ()
     (:quit-event () t)))

但是什么也没发生,所以我输入'C-c C-c'来终止进程, 它显示了一些像这样的错误:

Restarts:
0: [CONTINUE] Continue from break.
1: [RETRY] Retry SLIME REPL evaluation request.
2: [*ABORT] Return to SLIME's top level.
3: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {1003FC0003}>)

Backtrace:
0: ("bogus stack frame")
1: ("foreign function: SDL_Delay")
2: (LISPBUILDER-SDL-CFFI::SDL-DELAY 27)
3: ((SB-PCL::EMF LISPBUILDER-SDL::PROCESS-TIMESTEP) #<unavailable argument> #<unavailable argument> #<LISPBUILDER-SDL:FPS-FIXED {10059F6E43}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {10056C6A0B}>)
4: ((:METHOD LISPBUILDER-SDL::PROCESS-TIMESTEP :AROUND (LISPBUILDER-SDL::FPS-MANAGER T)) #<LISPBUILDER-SDL:FPS-FIXED {10059F6E43}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {10056C6A0B}>) [fast-metho..
5: ((LAMBDA ()))
6: (SB-INT:SIMPLE-EVAL-IN-LEXENV (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))) #<NULL-LEXENV>)
7: (EVAL (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))))

有人可以帮我解决这个错误吗?

【问题讨论】:

    标签: macos lisp sdl common-lisp


    【解决方案1】:

    我试图重现您的示例 (Linux/SBCL)。第一:

    (ql:quickload :lispbuilder-sdl)
    

    然后:

    (sdl:with-init ()
      (sdl:window 320 240)
      (sdl:update-display)
      (sdl:with-events ()
        (:quit-event () t)))
    

    这会在 REPL 挂起时显示一个空窗口(如预期的那样),直到我关闭窗口并可以再次使用 REPL。但是如果我在显示窗口时执行 C-c C-c ,那么我会获得类似于您的堆栈跟踪:

    Interrupt from Emacs
       [Condition of type SIMPLE-ERROR]
    
    Restarts:
     0: [CONTINUE] Continue from break.
     1: [RETRY] Retry SLIME REPL evaluation request.
     2: [*ABORT] Return to SLIME's top level.
     3: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {1003498033}>)
    
    Backtrace:
      0: ("bogus stack frame")
      1: ((SB-PCL::EMF LISPBUILDER-SDL::PROCESS-TIMESTEP) #<unavailable argument> #<unavailable argument> #<LISPBUILDER-SDL:FPS-FIXED {1006F962A3}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {1006F95F0B}>)
      2: ((:METHOD LISPBUILDER-SDL::PROCESS-TIMESTEP :AROUND (LISPBUILDER-SDL::FPS-MANAGER T)) #<LISPBUILDER-SDL:FPS-FIXED {1006F962A3}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {1006F95F0B}>) [fast-metho..
      3: ((LAMBDA ()))
      4: (SB-INT:SIMPLE-EVAL-IN-LEXENV (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))) #<NULL-LEXENV>)
      5: (EVAL (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))))
     --more--
    

    但是,一切都按预期进行,因为我可以选择继续执行或中止。这就是中断的用途。

    我的猜测是一切正常,但您看不到窗口。我不知道为什么,很遗憾,我没有使用 OS X 的经验。也许如果您尝试按照SDL window does not show 中的建议实际显示某些内容(见下文),它可能会起作用。 这是一个绘制一些东西的例子:

    (sdl:with-init ()
      (sdl:window 320 240)
      (sdl:update-display)
      (sdl:with-events ()
        (:quit-event () t)
        (:idle (sdl:fill-surface sdl:*white*)
               (sdl:update-display))))
    

    【讨论】:

    • 感谢您的回答,我在Linux上也试过代码,效果很好。 SDL 需要 cocoahelper 才能在 OSX 上使用 cocoa,也许 cocoahelper 有问题,但我不知道如何解决。
    • 这可能是与史莱姆的互动。如果您使用默认的 spawn 通信方式,请将其更改为 sigio 并查看是否有效。
    • 我将swank.lisp文件中的通信方式改成了:SIGIO:FD-HANDLER,运行代码,还是不行,出现新的错误arithmetic error FLOATING-POINT-INEXACT signalled
    • 那么有两条建议。首先尝试在贫民窟之外运行它,看看它是否有效。第二种是在确定它是否是粘液后去 lispbuilder Google 小组并在那里询问。他们通常很有帮助。这就是我不久前解决问题的方法。干杯
    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    相关资源
    最近更新 更多