最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用FFM?API調(diào)用SDL詳解

 更新時間:2025年01月26日 08:18:00   作者:Enaium  
這篇文章主要為大家詳細介紹了Java如何使用FFM?API調(diào)用SDL,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下

首先我們需要創(chuàng)建一個Gradle項目,之后設(shè)置項目的JDK版本,設(shè)置為22及以上版本。

plugins {
    kotlin("jvm") version "2.1.0"
}

group = "cn.enaium"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    testImplementation(kotlin("test"))
}

tasks.test {
    useJUnitPlatform()
}
kotlin {
    jvmToolchain(23)
}

接著我們在當前目錄初始化git倉庫,之后需要添加一個子模塊。、

git init
git submodule add git@github.com:libsdl-org/SDL.git SDL

之后編寫生成接口的腳本,在這之前你必須安裝CMakejextract到環(huán)境變量中。

$sdl_path = "SDL"
mkdir "$sdl_path/build"; cmake -DCMAKE_BUILD_TYPE=Release "$sdl_path" -B "$sdl_path/build"; cmake --build "$sdl_path/build" --config Release --parallel
jextract --include-dir "$sdl_path/include" --dump-includes "$sdl_path/build/includes.txt" "$sdl_path/include/SDL3/SDL.h"
jextract --include-dir "$sdl_path/include" --output src/main/java --target-package org.libsdl --library SDL3 --use-system-load-library "@$sdl_path/build/includes.txt" "$sdl_path/include/SDL3/SDL.h"

首先是使用CMake編譯SDL,之后使用jextract生成Java接口,之后運行腳本,這樣就會在src/main/java生成SDL3的接口。

接著我們回到build.gradle.kts,添加application插件,之后將編譯好的路徑添加到啟動參數(shù)中。

plugins {
    application
}

application {
    mainClass = "MainKt"
    applicationDefaultJvmArgs = listOf("-Djava.library.path=SDL/build/Release", "--enable-native-access=ALL-UNNAMED")
}

之后就可以調(diào)用SDL的接口了。

import org.libsdl.*
import org.libsdl.SDL_h_1.*
import java.lang.foreign.Arena

/**
 * @author Enaium
 */
fun main() {
    Arena.ofConfined().use {
        val init = SDL_h_2.SDL_Init(SDL_INIT_VIDEO() and SDL_INIT_EVENTS())

        if (!init) {
            println("SDL_Init Error: ${SDL_h_3.SDL_GetError()}")
            return
        }

        val windowPtr = it.allocate(C_POINTER)
        val rendererPtr = it.allocate(C_POINTER)

        SDL_CreateWindowAndRenderer(it.allocateFrom("Hello World"), 640, 480, 0, windowPtr, rendererPtr)

        val window = windowPtr.get(C_POINTER, 0)
        val renderer = rendererPtr.get(C_POINTER, 0)

        val rect = SDL_FRect.allocate(it)
        SDL_FRect.x(rect, 100f)
        SDL_FRect.y(rect, 100f)
        SDL_FRect.w(rect, 440f)
        SDL_FRect.h(rect, 280f)


        val event = SDL_Event.allocate(it)
        var quit = false
        while (!quit) {
            while (SDL_PollEvent(event)) {
                when (SDL_Event.type(event)) {
                    SDL_EVENT_QUIT() -> {
                        quit = true
                    }

                    SDL_EVENT_KEY_DOWN() -> {
                        when (SDL_KeyboardEvent.key(SDL_Event.key(event))) {
                            SDLK_UP() -> {
                                SDL_FRect.y(rect, SDL_FRect.y(rect) - 5)
                            }

                            SDLK_DOWN() -> {
                                SDL_FRect.y(rect, SDL_FRect.y(rect) + 5)
                            }

                            SDLK_LEFT() -> {
                                SDL_FRect.x(rect, SDL_FRect.x(rect) - 5)
                            }

                            SDLK_RIGHT() -> {
                                SDL_FRect.x(rect, SDL_FRect.x(rect) + 5)
                            }
                        }
                    }
                }
            }

            SDL_h_2.SDL_SetRenderDrawColor(renderer, 33.toByte(), 33.toByte(), 33.toByte(), 255.toByte())
            SDL_h_2.SDL_RenderClear(renderer)

            SDL_h_2.SDL_SetRenderDrawColor(renderer, 0.toByte(), 0.toByte(), 255.toByte(), 255.toByte())

            SDL_h_2.SDL_RenderFillRect(renderer, rect)

            SDL_h_2.SDL_RenderPresent(renderer)
        }

        SDL_h_2.SDL_DestroyRenderer(renderer)
        SDL_h_3.SDL_DestroyWindow(window)
    }
}

首先這里創(chuàng)建了一個窗口和渲染器,還渲染了一個矩形。之后做了事件處理,關(guān)閉的時候跳出循環(huán),之后銷毀窗口和渲染器。按下鍵盤上下左右鍵可以移動矩形。

之后調(diào)用./gradlew run就可以運行程序了。

到此這篇關(guān)于Java使用FFM API調(diào)用SDL詳解的文章就介紹到這了,更多相關(guān)Java FFM調(diào)用SDL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 判斷一個數(shù)組中的數(shù)值是否連續(xù)相鄰的方法

    java 判斷一個數(shù)組中的數(shù)值是否連續(xù)相鄰的方法

    下面小編就為大家分享一篇java 判斷一個數(shù)組中的數(shù)值是否連續(xù)相鄰的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Java靜態(tài)static與實例instance方法示例

    Java靜態(tài)static與實例instance方法示例

    這篇文章主要為大家介紹了Java靜態(tài)static與實例instance方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • java實現(xiàn)對服務器的自動巡檢郵件通知

    java實現(xiàn)對服務器的自動巡檢郵件通知

    這篇文章主要為大家詳細介紹了java實現(xiàn)對服務器的自動巡檢郵件通知,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java枚舉類型enum的詳解及使用

    Java枚舉類型enum的詳解及使用

    這篇文章主要介紹了Java枚舉類型enum的詳解及使用的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java中綴表達式轉(zhuǎn)后綴表達式實現(xiàn)方法詳解

    Java中綴表達式轉(zhuǎn)后綴表達式實現(xiàn)方法詳解

    這篇文章主要介紹了Java中綴表達式轉(zhuǎn)后綴表達式實現(xiàn)方法,結(jié)合實例形式分析了Java中綴表達式轉(zhuǎn)換成后綴表達式的相關(guān)算法原理與具體實現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • Java ArrayUtils數(shù)組工具類使用詳解

    Java ArrayUtils數(shù)組工具類使用詳解

    這篇文章主要介紹了Java ArrayUtils數(shù)組工具類使用,?ArrayUtils?是Apache Commons Lang庫中的一個工具類,主要用于處理數(shù)組的各種操作,它提供了許多實用的方法,包括數(shù)組的創(chuàng)建、修改、查詢等操作,極大地簡化了數(shù)組處理的復雜度,需要的朋友可以參考下
    2025-05-05
  • Spring boot整合log4j2過程解析

    Spring boot整合log4j2過程解析

    這篇文章主要介紹了Spring boot整合log4j2過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot中的6種API請求參數(shù)讀取方式總結(jié)

    SpringBoot中的6種API請求參數(shù)讀取方式總結(jié)

    使用Spring Boot開發(fā)API的時候,讀取請求參數(shù)是服務端編碼中最基本的一項操作,Spring Boot中也提供了多種機制來滿足不同的API設(shè)計要求,通過本文,為大家總結(jié)6種常用的請求參數(shù)讀取方式,需要的朋友可以參考下
    2024-07-07
  • IDEA插件指南之Mybatis?log插件安裝及使用方法

    IDEA插件指南之Mybatis?log插件安裝及使用方法

    這篇文章主要給大家介紹了關(guān)于IDEA插件指南之Mybatis?log插件安裝及使用的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-02-02
  • JAVA實現(xiàn)KMP算法理論和示例代碼

    JAVA實現(xiàn)KMP算法理論和示例代碼

    本文從理論到代碼講解了JAVA對KMP算法的實現(xiàn),大家可以參考一下
    2013-11-11

最新評論

江永县| 宜兴市| 姚安县| 正蓝旗| 恩施市| 裕民县| 万盛区| 临漳县| 长岭县| 枣强县| 徐汇区| 遂昌县| 文化| 正安县| 太保市| 濮阳市| 西吉县| 汾西县| 大埔县| 日土县| 枣阳市| 海安县| 游戏| 永福县| 山西省| 平度市| 北碚区| 临夏县| 台中市| 永定县| 诸城市| 武城县| 五华县| 晋中市| 图们市| 响水县| 丹寨县| 名山县| 正安县| 资源县| 库尔勒市|