SDL3_API分类参考_对象属性(CategoryProperties)

2026-3-6 / 0 评论 / 3 阅读

对象属性(CategoryProperties)

属性(Property)是一种可以在运行时通过名称创建和获取的变量。

所有属性都属于一个属性组(属性组ID:SDL_PropertiesID)。
属性组可通过 SDL_CreateProperties 函数创建,通过 SDL_DestroyProperties 函数销毁。

可通过以下函数向属性组添加/获取属性:

  • SDL_SetPointerProperty / SDL_GetPointerProperty:操作 void* 指针类型
  • SDL_SetStringProperty / SDL_GetStringProperty:操作字符串类型
  • SDL_SetNumberProperty / SDL_GetNumberProperty:操作有符号64位整数类型
  • SDL_SetFloatProperty / SDL_GetFloatProperty:操作浮点类型
  • SDL_SetBooleanProperty / SDL_GetBooleanProperty:操作布尔类型

可通过 SDL_ClearProperty 从属性组中移除属性。

函数/类型/枚举/宏 翻译 + 简要说明

英文名称 中文翻译 简要说明
SDL_ClearProperty 清除属性 从属性组中移除指定名称的属性
SDL_CopyProperties 复制属性 将一个属性组的所有属性复制到另一个属性组
SDL_CreateProperties 创建属性组 新建一个空的属性组并返回其ID
SDL_DestroyProperties 销毁属性组 释放属性组及其所有属性占用的内存
SDL_EnumerateProperties 枚举属性 遍历属性组中所有属性并调用回调函数
SDL_GetBooleanProperty 获取布尔属性 从属性组中读取布尔类型属性值
SDL_GetFloatProperty 获取浮点属性 从属性组中读取浮点类型属性值
SDL_GetGlobalProperties 获取全局属性组 获取SDL全局属性组的ID
SDL_GetNumberProperty 获取数值属性 从属性组中读取64位有符号整数属性值
SDL_GetPointerProperty 获取指针属性 从属性组中读取指针类型属性值
SDL_GetPropertyType 获取属性类型 获取指定属性的类型(SDL_PropertyType)
SDL_GetStringProperty 获取字符串属性 从属性组中读取字符串类型属性值
SDL_HasProperty 检查属性存在性 判断属性组中是否存在指定名称的属性
SDL_LockProperties 锁定属性组 加锁属性组以保证线程安全
SDL_SetBooleanProperty 设置布尔属性 向属性组写入布尔类型属性值
SDL_SetFloatProperty 设置浮点属性 向属性组写入浮点类型属性值
SDL_SetNumberProperty 设置数值属性 向属性组写入64位有符号整数属性值
SDL_SetPointerProperty 设置指针属性 向属性组写入指针类型属性值
SDL_SetPointerPropertyWithCleanup 设置带清理的指针属性 写入指针属性并指定清理回调函数
SDL_SetStringProperty 设置字符串属性 向属性组写入字符串类型属性值
SDL_UnlockProperties 解锁属性组 释放属性组的线程锁
SDL_CleanupPropertyCallback 属性清理回调函数类型 释放指针属性时的回调函数类型定义
SDL_EnumeratePropertiesCallback 属性枚举回调函数类型 枚举属性时的回调函数类型定义
SDL_PropertiesID 属性组ID类型 标识属性组的唯一ID类型
SDL_PropertyType 属性类型枚举 定义所有支持的属性类型(指针/字符串/数值等)
SDL_PROP_NAME_STRING 属性名字符串宏 用于标准化属性名称的宏定义

FreeBASIC 示例代码

' 编译前需确保已链接SDL2库
' 编译命令示例:fbc -s console -lSDL2 properties_demo.bas

#include "SDL.bi"

' 错误检查宏
#define CHECK_ERROR(ret, msg) if (ret <> 0) then print msg & " 失败,错误:" & *SDL_GetError() : goto cleanup

Sub DemoProperties()
    Dim As SDL_PropertiesID props = SDL_CreateProperties()
    If (props = 0) Then
        Print "创建属性组失败,错误:" & *SDL_GetError()
        Return
    End If
    Print "成功创建属性组,ID:" & props

    ' 1. 设置/获取字符串属性
    Dim As Integer ret = SDL_SetStringProperty(props, "window.title", "SDL属性示例")
    CHECK_ERROR(ret, "设置字符串属性")

    Dim As ZString Ptr title = SDL_GetStringProperty(props, "window.title", "默认标题")
    Print "读取窗口标题:" & *title

    ' 2. 设置/获取数值属性(64位整数)
    ret = SDL_SetNumberProperty(props, "window.width", 800)
    CHECK_ERROR(ret, "设置数值属性")

    Dim As Int64 width = SDL_GetNumberProperty(props, "window.width", 640)
    Print "读取窗口宽度:" & width

    ' 3. 设置/获取布尔属性
    ret = SDL_SetBooleanProperty(props, "fullscreen", SDL_TRUE)
    CHECK_ERROR(ret, "设置布尔属性")

    Dim As SDL_bool fullscreen = SDL_GetBooleanProperty(props, "fullscreen", SDL_FALSE)
    Print "读取全屏状态:" & IIf(fullscreen = SDL_TRUE, "开启", "关闭")

    ' 4. 检查属性是否存在
    If (SDL_HasProperty(props, "window.height") = SDL_FALSE) Then
        Print "属性 window.height 不存在,设置默认值 600"
        ret = SDL_SetNumberProperty(props, "window.height", 600)
        CHECK_ERROR(ret, "设置默认高度")
    End If

    ' 5. 枚举所有属性(自定义回调函数)
    Print vbCrLf & "枚举所有属性:"
    Sub EnumerateCallback cdecl (ByVal userdata As Any Ptr, ByVal name As Const ZString Ptr, ByVal type_ As SDL_PropertyType) As SDL_bool
        Print "属性名:" & *name & ",类型:" & type_
        Return SDL_TRUE ' 继续枚举
    End Sub
    SDL_EnumerateProperties(props, @EnumerateCallback, Null)

    ' 6. 清除单个属性
    ret = SDL_ClearProperty(props, "fullscreen")
    CHECK_ERROR(ret, "清除全屏属性")
    If (SDL_HasProperty(props, "fullscreen") = SDL_FALSE) Then
        Print vbCrLf & "已成功清除 fullscreen 属性"
    End If

cleanup:
    ' 销毁属性组
    If (props <> 0) Then
        SDL_DestroyProperties(props)
        Print vbCrLf & "已销毁属性组"
    End If
End Sub

' 主程序
SDL_Init(SDL_INIT_VIDEO)
DemoProperties()
SDL_Quit()

Print vbCrLf & "按任意键退出..."
Sleep

评论一下?

OωO
取消