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 ... ...
近期下载者:
相关文件:
收藏者: