2016-04-23 156 views
0

任何人都可以在Mac OS X上开发常见的lisp游戏?最近,我想在Mac OS X上建立一个lisp游戏开发,但我陷入困境。在Mac OS X上安装lispbuilder-sdl

Operating System version: 
    ProductName: Mac OS X 
    ProductVersion: 10.11.4 
    BuildVersion: 15E65 

sbcl version: 
    SBCL 1.3.3 

我发现GitHub的库页:https://github.com/lispbuilder/lispbuilder/wiki/DownloadInstallation,并按照OS X安装的一部分。我尝试安装SDL 1.2和运行时二进制文件的运行时库以及SDL 2.0的开发库。它表现为以下几点:

当我运行它运行于Linux以及一些简单的代码,使用lispbuilder-SDL:

(defun draw-a-box-in-window() 
(sdl:with-init 
() 
(let ((width 500) 
     (height 500)) 
    (sdl:window width height) 
    (setf (sdl:frame-rate) 60) 
    (sdl:clear-display 
    (sdl:color 
    :r 127 
    :g 127 
    :b 127)) 
    (sdl:draw-box 
    (sdl:rectangle 
    :x (floor (/ width 3)) 
    :y (floor (/ height 3)) 
    :w (floor (/ height 3)) 
    :h (floor (/ height 3))) 
    :color (sdl:color 
      :r 200 
      :g 200 
      :b 200)) 
    (sdl:update-display) 
    (sdl:with-events 
    () 
    (:quit-event() t) 
    (:key-down-event() 
        (when (sdl:key-down-p :sdl-key-q) 
         (sdl:push-quit-event))))))) 
(draw-a-box-in-window) 

一些错误的事情发生了:

arithmetic error FLOATING-POINT-INEXACT signalled 
[Condition of type FLOATING-POINT-INEXACT] 

Restarts: 
0: [RETRY] Retry SLIME evaluation request. 
1: [*ABORT] Return to SLIME's top level. 
2: [ABORT] abort thread (#<THREAD "worker" RUNNING {1005D039E3}>) 

Backtrace: 
0: ("bogus stack frame") 
1: ("foreign function: -[NSPlaceholderNumber initWithDouble:]") 
2: ("foreign function: +[CALayer defaultValueForKey:]") 

任何人知道如何解决那?谢谢。

回答

0

你好@aries_liuxueyangm,我向你提出这个解决方案。

(ql:quickload 'lispbuilder-sdl) 

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

(defparameter *random-color* sdl:*white*) 

(defun draw-a-box-in-window() 
(sdl:with-init 
() 
(let ((width 500) 
     (height 500)) 
    (sdl:window width height) 
    (setf (sdl:frame-rate) 60) 
    (sdl:clear-display 
    (sdl:color 
    :r 127 
    :g 127 
    :b 127)) 
    (sdl:draw-box 
    (sdl:rectangle 
    :x (floor (/ width 3)) 
    :y (floor (/ height 3)) 
    :w (floor (/ height 3)) 
    :h (floor (/ height 3))) 
    :color (sdl:color 
      :r 200 
      :g 200 
      :b 200)) 
    (sdl:update-display) 
    (sdl:with-events 
    () 
    (:quit-event() t) 
    (:key-down-event() 
        (when (sdl:key-down-p :sdl-key-q) 
         (sdl:push-quit-event))))))) 


(defun main (argv &aux (argc (length argv))) 
    (draw-a-box-in-window) 
) 

(sb-int:with-float-traps-masked (:invalid :inexact :overflow) (main *posix-argv*)) 
+0

This works。非常感谢!虽然有时会发生奇怪的事情 – aries

+0

@aries如果它工作,你应该标记答案是正确的。这给了答案 - 呃他们当之无愧的业力 – Baggers

+0

@巴格斯感谢您的建议。我刚刚标记了它。 – aries