在OcamlSDL中用颜色填充矩形的问题

时间:2015-04-29 13:55:03

标签: ocaml sdl

我试图在OcamlSDL的窗口中央显示一个彩色方块。为正方形创建表面和矩形并在屏幕上的正确位置进行布局工作没有问题,但是当我尝试为矩形着色时,只有部分颜色变为彩色(如此screenshot中所示)。

这是我的代码:

open Sdlevent
open Sdlkey
open Sdlvideo

let image_src = "background.jpg"
let win_x = 1200
let win_y = 800
let side = 10
let sq_size = 40
let seps = 10
let board_side = side * sq_size + seps * side
let o_x = (win_x - board_side) / 2
let o_y = (win_y - board_side) / 2
let f_x = o_x + board_side
let f_y = o_y + board_side

let rec event_handler () = match wait_event () with
    | KEYDOWN {keysym=KEY_ESCAPE} -> ()
    | event -> event_handler ()

let main () =
    Sdl.init [`VIDEO];
    at_exit Sdl.quit;
    let screen = Sdlvideo.set_video_mode win_x win_y [] in
    let bg = Sdlloader.load_image image_src in
    let pos_bg = Sdlvideo.rect 0 0 win_x win_y in
    Sdlvideo.blit_surface ~dst_rect:pos_bg ~src:bg ~dst:screen ();
    Printf.printf "board side = %d, o_x = %d, o_y = %d, f_x = %d, f_y = %d\n" board_side o_x o_y f_x f_y ;
    let board = Sdlvideo.create_RGB_surface [`HWSURFACE] board_side board_side 32 (Int32.of_int 0) (Int32.of_int 0) (Int32.of_int 0) (Int32.of_int 0) in
    let pos_board = Sdlvideo.rect o_x o_y f_x f_y in
    Sdlvideo.fill_rect ~rect:pos_board board (Int32.of_int 4294967295) ;
    Sdlvideo.blit_surface ~dst_rect:pos_board ~src:board ~dst:screen () ;
    Sdlvideo.flip screen;
    event_handler ()

let _ = main ()

我环顾四周,找不到与我相似的任何案件,而且OcamlSDL的文档没有任何帮助。 我觉得我错过了一些明显的东西,但我不知道是什么。有什么建议 ?这是在Ubuntu 14.04 64位上。

1 个答案:

答案 0 :(得分:0)

仔细观察以下两行:

Sdlvideo.fill_rect ~rect:pos_board board (Int32.of_int 4294967295) ;
Sdlvideo.blit_surface ~dst_rect:pos_board ~src:board ~dst:screen () ;

您正在从左上边缘用pos_board填充板中的矩形。因此,只有部分电路板是白色的。所以现在你的电路板是一个带有白色角落的黑色矩形。

然后你再次使用pos_board的偏移将板子放到屏幕上。这使得黑色手镯在屏幕中间带有白色角落。正如截图所示。

如果你想让整个棋盘都是白色,你必须使用(0,0)作为左上角。董事会的坐标是相对的。