Raylib

所属分类:编程语言基础
开发工具:Lua
文件大小:0KB
下载次数:0
上传日期:2023-11-19 01:18:32
上 传 者sh-1993
说明:  Nelua编程语言的Raylib绑定
(Raylib binding for the Nelua Programming Language)

文件列表:
CHANGELOG.txt (1967, 2023-11-18)
CONTRIBUTING.md (993, 2023-11-18)
DEVELOPMENT.md (2692, 2023-11-18)
INSTALL.md (1300, 2023-11-18)
LICENSE (886, 2023-11-18)
assets/ (0, 2023-11-18)
assets/logo.png (268, 2023-11-18)
examples/ (0, 2023-11-18)
examples/core/ (0, 2023-11-18)
examples/core/basic_window/ (0, 2023-11-18)
examples/core/basic_window/main.nelua (1379, 2023-11-18)
examples/core/camera_3d_free/ (0, 2023-11-18)
examples/core/camera_3d_free/main.nelua (2631, 2023-11-18)
examples/core/input_keys/ (0, 2023-11-18)
examples/core/input_keys/main.nelua (1684, 2023-11-18)
examples/other/ (0, 2023-11-18)
examples/other/bunnymark/ (0, 2023-11-18)
examples/other/bunnymark/main.nelua (4200, 2023-11-18)
examples/other/bunnymark/resources/ (0, 2023-11-18)
examples/other/bunnymark/resources/wabbit_alpha.png (496, 2023-11-18)
examples/raygui/ (0, 2023-11-18)
examples/raygui/portable_window/ (0, 2023-11-18)
examples/raygui/portable_window/main.nelua (2509, 2023-11-18)
examples/raygui/scroll_panel/ (0, 2023-11-18)
examples/raygui/scroll_panel/main.nelua (6418, 2023-11-18)
examples/textures/ (0, 2023-11-18)
examples/textures/texture_loading/ (0, 2023-11-18)
examples/textures/texture_loading/main.nelua (1578, 2023-11-18)
rayeasings.nelua (8370, 2023-11-18)
raygui.nelua (23914, 2023-11-18)
raylib.nelua (132225, 2023-11-18)
rcamera.nelua (1905, 2023-11-18)
rlgl.nelua (28693, 2023-11-18)

# Raylib.nelua - [Raylib](https://www.raylib.com/) binding for the [Nelua Programming Language](https://nelua.io/)

[Installation](./INSTALL.md) [Development](./DEVELOPMENT.md) [Contributing](./CONTRIBUTING.md) [License](./LICENSE)
**Raylib.nelua** is a [Raylib](https://www.raylib.com/) binding for latest Raylib 5.0 version. A simple and easy-to-use library to learn videogames programming. Raylib.nelua. It's like Raylib on steroids, except without the harmful side effects. This delightful little binding brings the power and simplicity of Nelua to the world of Raylib game development. ### Code Example
Raylib - Basic Window ```lua require "raylib" -- Initialization -------------------------------------------------------------------------------------- local SCREEN_WIDTH: uint16 = 800 local SCREEN_HEIGHT: uint16 = 450 rl.setConfigFlags(rl.configFlags.VSYNC_HINT) -- Enable VSYNC rl.initWindow(SCREEN_WIDTH,SCREEN_HEIGHT, "raylib-nelua [core] example - basic window") -------------------------------------------------------------------------------------- -- Main game loop while not rl.windowShouldClose() do -- Detect window close button or ESC key -- Update ---------------------------------------------------------------------------------- -- TODO: Update your variables here ---------------------------------------------------------------------------------- -- Draw ---------------------------------------------------------------------------------- rl.beginDrawing() rl.clearBackground(rl.RAYWHITE) rl.drawText("Congrats! You created your first window!", 190, 200, 20, rl.LIGHTGRAY) rl.endDrawing() ----------------------------------------------------------------------------------- end -- De-Initialization ------------------------------------------------------------------------------------- rl.closeWindow() -- Close window and OpenGL context ------------------------------------------------------------------------------------- ```
Raylib - Basic Keyboard Input ```lua require "raylib" -- Constants -------------------------------------------------------------------------------------- local SCREEN_WIDTH: uint16 = 800 local SCREEN_HEIGHT: uint16 = 450 -------------------------------------------------------------------------------------- -- Initialization -------------------------------------------------------------------------------------- rl.initWindow(SCREEN_WIDTH,SCREEN_HEIGHT, "Raylib.nelua [core] example - keyboard input") rl.setTargetFPS(60) local ballPosition = rl.vector2{ SCREEN_WIDTH/2, SCREEN_HEIGHT/2 } -- Main game loop while not rl.windowShouldClose() do -- Detect window close button or ESC key -- Update ---------------------------------------------------------------------------------- if rl.isKeyDown(rl.keyboardKey.RIGHT) then ballPosition.x = ballPosition.x + 2 end if rl.isKeyDown(rl.keyboardKey.LEFT) then ballPosition.x = ballPosition.x - 2 end if rl.isKeyDown(rl.keyboardKey.UP) then ballPosition.y = ballPosition.y - 2 end if rl.isKeyDown(rl.keyboardKey.DOWN) then ballPosition.y = ballPosition.y + 2 end -- Draw ---------------------------------------------------------------------------------- rl.drawing(function() rl.clearBackground(rl.RAYWHITE) rl.drawText("move the ballwith arrow keys", 10, 10, 20, rl.DARKGRAY) rl.drawCircleV(ballPosition, 50, rl.MAROON) end) end -- De-Initialization ------------------------------------------------------------------------------------- rl.closeWindow() -- Close window and OpenGL context ------------------------------------------------------------------------------------- ```
Raylib - Texture Loading and Drawing ```lua require "raylib" -- Constants -------------------------------------------------------------------------------------- local SCREEN_WIDTH: uint16 = 800 local SCREEN_HEIGHT: uint16 = 450 -------------------------------------------------------------------------------------- -- Initialization -------------------------------------------------------------------------------------- rl.initWindow(SCREEN_WIDTH,SCREEN_HEIGHT, "Raylib.nelua [textures] example - texture loading and drawing") rl.setTargetFPS(60) -- NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) local texture = rl.loadTexture("./resources/logo.png") -- Texture loading -- Main game loop while not rl.windowShouldClose() do -- Detect window close button or ESC key -- Update -- TODO: Update your variables here ---------------------------------------------------------------------------------- -- Draw ---------------------------------------------------------------------------------- rl.drawing(function() rl.clearBackground(rl.RAYWHITE) rl.drawTexture(texture, SCREEN_WIDTH/2 - texture.width/2, SCREEN_HEIGHT/2 - texture.height/2, rl.WHITE) rl.drawText("this IS a texture!", 360, 370, 10, rl.GRAY); end) end -- De-Initialization ------------------------------------------------------------------------------------- rl.unloadTexture(texture) -- Texture unloading rl.closeWindow() -- Close window and OpenGL context ------------------------------------------------------------------------------------- ```
Raylib - Export to Web via Emscripten ```lua require "raylib" require 'allocators.gc' ##[[ if PLATFORM_WEB then cflags '-O3 -Wall' -- Change your optimisation options to suit your needs. cflags './source/dependencies/lib/libraylib.a -I./source/dependencies/include/ -L./source/dependencies/lib/' -- Include & Library locations cflags '--preload-file ./source/assets' cflags '-s USE_GLFW=3 -DPLATFORM_WEB -s WASM=1 -s USE_WEBGL2=1' -- Recommended to not touch. end ]] ## if PLATFORM_WEB then collectgarbage('stop') -- conservative GCs cannot run automatically with emscripten ## end -- Initialization -------------------------------------------------------------------------------------- local SCREEN_WIDTH: uint16 = 800 local SCREEN_HEIGHT: uint16 = 450 ## if not PLATFORM_WEB then rl.setConfigFlags(rl.configFlags.VSYNC_HINT) -- Enable VSYNC if we're building for Desktop ## end rl.initWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Raylib.nelua [core] example - basic window") local function update() rl.beginDrawing() rl.clearBackground(rl.RAYWHITE) rl.drawText("Congrats! You created your first window!", 190, 200, 20, rl.LIGHTGRAY) rl.endDrawing() ## if PLATFORM_WEB then collectgarbage() -- safe to collect garbage here ## end end ## if PLATFORM_WEB then rl.wasmSetMainLoop(update, 0, 1) -- If building for web, pass wasmSetMainLoop which calls emscripten_set_main_loop. Don't use if you're passing ASYNCIFY flag! ## else while not rl.windowShouldClose() do update() end ##end -------------------------------------------------------------------------------------- -- De-Initialization ------------------------------------------------------------------------------------- rl.closeWindow() -- Close window and OpenGL context ------------------------------------------------------------------------------------- ``` > **Notes** > > - Emscripten must be installed on your system. > > - You have to provide your own Raylib 4.5-dev (build from source) libraylib.a and include files for web export. [Please read here](https://github.com/raysan5/raylib/wiki/Working-for-Web-(HTML5)). > > - Your library and include files have to be placed in a folder "libs"/"include" respectively. You can, however change those settings in raylib.nelua. > > - You have to pass `rl.wasmSetMainLoop(UpdateFunctionHere, 0, 1)` function as seen on example above if you're not planning to use `-s ASYNCIFY` flag. [Read more about this here](https://github.com/raysan5/raylib/wiki/Working-for-Web-(HTML5)#42-use-standard-raylib-whilewindowshouldclose-loop). > > - To build, pass emcc to to Nelua compiler
Raylib - 3D Free Camera ```lua require "raylib" -- Constants -------------------------------------------------------------------------------------- local SCREEN_WIDTH: uint16 = 800 local SCREEN_HEIGHT: uint16 = 450 -------------------------------------------------------------------------------------- -- Initialization -------------------------------------------------------------------------------------- rl.initWindow(SCREEN_WIDTH,SCREEN_HEIGHT, "Raylib.nelua [core] example - 3d camera free") local camera = rl.camera3D{} -- Define the camera to look into our 3d world camera.position = rl.vector3{ 10, 10, 10 } -- Camera position camera.target = rl.vector3{ 0, 0, 0 } -- Camera looking at point camera.up = rl.vector3{ 0, 1, 0 } -- Camera up vector (rotation towards target) camera.fovy = 45 -- Camera field-of-view Y camera.projection = rl.cameraProjection.PERSPECTIVE -- Camera projection type local cubePosition = rl.vector3{ 0, 0, 0 } rl.disableCursor() -- Limit cursor to relative movement inside the window rl.setTargetFPS(60) ------------------------------------------------------------------------------------ -- Main game loop while not rl.windowShouldClose() do -- Detect window close button or ESC key -- Update ---------------------------------------------------------------------------------- rl.updateCamera(&camera, rl.cameraMode.FREE) if rl.isKeyDown(rl.keyboardKey.Z) then camera.target = rl.vector3{ 0, 0, 0 } end -- Draw ---------------------------------------------------------------------------------- rl.drawing(function() rl.clearBackground(rl.RAYWHITE) rl.mode3D(camera, function() rl.drawCube(cubePosition, 2, 2, 2, rl.RED) rl.drawCubeWires(cubePosition, 2, 2, 2, rl.MAROON) rl.drawGrid(10, 1) end) rl.drawRectangle(10, 10, 320, 133, rl.fade(rl.SKYBLUE, 0.5)) rl.drawRectangleLines( 10, 10, 320, 133, rl.BLUE) rl.drawText("Free camera default controls:", 20, 20, 10, rl.BLACK) rl.drawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, rl.DARKGRAY) rl.drawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, rl.DARKGRAY) rl.drawText("- Alt + Mouse Wheel Pressed to Rotate", 40, 80, 10, rl.DARKGRAY) rl.drawText("- Alt + Ctrl + Mouse Wheel Pressed for Smooth Zoom", 40, 100, 10, rl.DARKGRAY) rl.drawText("- Z to zoom to (0, 0, 0)", 40, 120, 10, rl.DARKGRAY) end) end -- De-Initialization ------------------------------------------------------------------------------------- rl.closeWindow() -- Close window and OpenGL context ------------------------------------------------------------------------------------- ```
Raygui - Portable Window ```lua require "raylib" require "raygui" -- Initialization --------------------------------------------------------------------------------------- local SCREEN_WIDTH = 800 local SCREEN_HEIGHT = 600 rl.setConfigFlags(rl.configFlags.WINDOW_UNDECORATED) rl.initWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "raygui.nelua - portable window") -- General variables local mousePosition = rl.vector2{ x = 0, y = 0 } local windowPosition = rl.vector2{ x = 500, y = 200 } local panOffset = mousePosition local dragWindow: boolean = false rl.setWindowPosition(windowPosition.x, windowPosition.y) local exitWindowPress: int32 rl.setTargetFPS(60) -------------------------------------------------------------------------------------- -- Main game loop while not rlgui.intToBool(exitWindowPress) and not rl.windowShouldClose() do -- Update ---------------------------------------------------------------------------------- mousePosition = rl.getMousePosition() if rl.isMouseButtonPressed(rl.mouseButton.LEFT_BUTTON) and not dragWindow then if rl.checkCollisionPointRec(mousePosition, rl.rectangle{ x = 0, y = 0, width = SCREEN_WIDTH, height = 20 }) then dragWindow = true panOffset = mousePosition end end if dragWindow then windowPosition.x = windowPosition.x + (mousePosition.x - panOffset.x) windowPosition.y = windowPosition.y + (mousePosition.y - panOffset.y) rl.setWindowPosition(math.floor(windowPosition.x), math.floor(windowPosition.y)) if rl.isMouseButtonReleased(rl.mouseButton.LEFT_BUTTON) then dragWindow = false end end ---------------------------------------------------------------------------------- -- Draw ---------------------------------------------------------------------------------- rl.beginDrawing() rl.clearBackground(rl.RAYWHITE) exitWindowPress = rlgui.windowBox({ x = 0, y = 0, width = SCREEN_WIDTH, height = SCREEN_HEIGHT }, "#198# PORTABLE WINDOW") rl.drawText(string.format("Mouse Position: [ %.0f, %.0f ]", mousePosition.x, mousePosition.y), 10, 40, 10, rl.DARKGRAY) rl.endDrawing() ---------------------------------------------------------------------------------- end -- De-Initialization -------------------------------------------------------------------------------------- rl.closeWindow() -- Close window and OpenGL context -------------------------------------------------------------------------------------- ```
Raygui - Scroll Panel ```lua require "raylib" require "raygui" -- Initialization -------------------------------------------------------------------------------------- local SCREEN_WIDTH = 800 local SCREEN_HEIGHT = 450 rl.initWindow(SCREEN_WIDTH,SCREEN_HEIGHT, "raygui.nelua - Scroll Panel") rl.setTargetFPS(60) local panelRec = rl.rectangle{ x = 20, y = 40, width = 200, height = 150 } local panelContentRec = rl.rectangle{ x = 0, y = 0, width = 340, height = 340 } local panelView = rl.rectangle{} local panelScroll = rl.vector2{ x = 99, y = -20 } local showContentArea = true --------------------------------------------------------------------------------------- -- Draw and process scroll bar style edition controls local function drawStyleEditControls() local style: int32 -- ScrollPanel style controls rlgui.groupBox(rl.rectangle{ x = 550, y = 170, width = 220, height = 205 }, "SCROLLBAR STYLE") style = rlgui.getStyle(rlgui.control.SCROLLBAR, rlgui.controlProperty.BORDER_WIDTH) rlgui.label(rl.rectangle{ x = 555, y = 195, width = 110, height = 10 }, "BORDER_WIDTH") rlgui.spinner(rl.rectangle{ x = 670, y = 190, width = 90, height = 20 }, "", &style, 0, 6, false) rlgui.setStyle(rlgui.control.SCROLLBAR, rlgui.controlProperty.BORDER_WIDTH, style) style = rlgui.getStyle(rlgui.control.SCROLLBAR, rlgui.scrollBarProperty.ARROWS_SIZE) rlgui.label(rl.rectangle{ x = 555, y = 220, width = 110, height = 10 }, "ARROWS_SIZE") rlgui.spinner(rl.rectangle{ x = 670, y = 215, width = 90, height = 20 }, "", &style, 4, 14, false) rlgui.setStyle(rlgui.control.SCROLLBAR, rlgui.scrollBarProperty.ARROWS_SIZE, style) style = rlgui.getStyle(rlgui.control.SCROLLBAR, rlgui.sliderProperty.SLIDER_PADDING) rlgui.label(rl.rectangle{ x = 555, y = 245, width = 110, height = 10 }, "SLIDER_PADDING") rlgui.spinner(rl.rectangle{ x = 670, y = 240, width = 90, height = 20 }, "", &style, 0, 14, false) rlgui.setStyle(rlgui.control.SCROLLBAR, rlgui.sliderProperty.SLIDER_PADDING, style) local scrollBarArrows = rlgui.getStyleAsBool(rlgui.control.SCROLLBAR, rlgui.scrollBarProperty.ARROWS_VISIBLE) rlgui.checkBox(rl.rectangle{ 565, 280, 20, 20 }, "ARROWS_VISIBLE", &scrollBarArrows) rlgui.setStyle(rlgui.control.SCROLLBAR, rlgui.scrollBarProperty.ARROWS_VISIBLE, rlgui.boolToInt(scrollBarArrows)) style = rlgui.getStyle(rlgui.control.SCROLLBAR, rlgui.sliderProperty.SLIDER_PADDING) rlgui.label(rl.rectangle{ x = 555, y = 325, width = 110, height = 10 }, "SLIDER_PADDING") rlgui.spinner(rl.rectangle{ x = 670, y = 320, width = 90, height = 20 }, "", &style, 0, 14, false) rlgui.setStyle(rlgui.control.SCROLLBAR, rlgui.sliderProperty.SLIDER_PADDING, style) style = rlgui.getStyle(rlgui.control.SCROLLBAR, rlgui.sliderProperty.SLIDER_WIDTH) rlgui.label(rl.rectangle{ x = 555, y = 350, width = 110, height = 10 }, "SLIDER_WIDTH") rlgui.spinner(rl.rectangle{ x = 670, y = 345, width = 90, height = 20 }, "", &style, 2, 100, false) rlgui.setStyle(rlgui.control.SCROLLBAR, rlgui.sliderProperty.SLIDER_WIDTH, style) local text = rlgui.getStyle(rlgui.control.LISTVIEW, rlgui.listViewProperty.SCROLLBAR_SIDE) == rlgui.SCROLLBAR_LEFT_SIDE and "SCROLLBAR: LEFT" or "SCROLLBAR: RIGHT" local toggleScrollBarSide = rlgui.getStyle(rlgui.control.LISTVIEW, rlgui.listViewProperty.SCROLLBAR_SIDE) rlgui.toggle(rl.rectangle{ x = 560, y = 110, width = 200, height = 35 }, text, &toggleScrollBarSide) rlgui.setStyle(rlgui.control.LISTVIEW, rlgui.listViewProperty.SCROLLBAR_SIDE, toggleScrollBarSide) ---------------------------------------------------------- -- ScrollBar style controls rlgui.groupBox(rl.rectangle{ x = 550, y = 20, width = 220, height = 135 }, "SCROLLPANEL STYLE") style = rlgui.getStyle(rlgui.control.LISTVIEW, rlgui.listViewProperty.SCROLLBAR_WIDTH) rlgui.label(rl.rectangle{ x = 555, y = 35, width = 110, height = 10 }, "SCROLLBAR_WIDTH") rlgui.spinner(rl.rectangle{ x = 670, y = 30, width = 90, height = 20 }, "", &style, 6, 30, false) rlgui.setStyle(rlgui.control.LISTVIEW, rlgui.listViewProperty.SCROLLBAR_WIDTH, style) style = rlgui.getStyle(DEFAULT, rlgui.controlProperty.BORDER_WIDTH) rlgui.label(rl.rectangle{ x = 555, y = 60, width = 110, height = 10 }, "BORDER_WIDTH") rlgui.spinner(rl.rectangle{ x = 670, y = 55, width = 90, height = 20 }, "", &style, 0, 20, false) rlgui.setStyle(DEFAULT, rlgui.controlProperty.BORDER_WIDTH, style) ---------------------------------------------------------- end -- Main game loop while not rl.windowShouldClose() do -- Update ---------------------------------------------------------------------------------- -- TODO: Implement required update logic ---------------------------------------------------------------------------------- -- Draw ---------------------------------------------------------------------------------- rl.beginDrawing() rl.clearBackground(rl.RAYWHITE) rl.drawText(string.format("[%f, %f]", panelScroll.x, panelScroll.y), 4, 4, 20, rl.RED) rlgui.scrollPanel(panelRec, "", panelContentRec, panelScroll, panelView) rl.beginScissorMode(panelView.x, panelView.y, panelView.width, panelView.height) rlgui.grid(rl.rectangle{ x = panelRec.x + panelScroll.x, y = panelRec.y + panelScroll.y, width = panelContentRec.width, height = panelContentRec.height }, "", 16, 3, rl.vector2{}) rl.endScissorMode() if showContentArea then rl.drawRectangle(panelRec.x + panelScroll.x, panelRec.y + panelScroll.y, panelContentRec.width, panelContentRec.height, rl.fade(rl.RED, 0.1)) end drawStyleEditControls() rlgui.checkBox(rl.rectangle{ x = 565, y = 80, width = 20, height = 20 }, "SHOW CONTENT AREA", &showContentArea) rlgui.sliderBar(rl.rectangle{ x = 590, y = 385, width = 145, height = 15 }, "WI ... ...

近期下载者

相关文件


收藏者