AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[lua](coding)

Martin Hope
A_CE
Asked: 2025-03-06 23:16:35 +0800 CST

是否可以用代码创建表中的算法?

  • 6

下面是 RGB 颜色代码表。

当我在带有 lua 代码的表单中使用此表时,我创建了一个 13*9 色调面板。是否可以创建一个代码,在不使用表格的情况下创建相同的算法(颜色代码)(或基于第一行 13 种颜色)?

local clrtbl = { 0x000033,0x001933,0x003333,0x003319,0x003300,0x193300,0x333300,0x331900,0x330000,0x330019,0x330033,0x190033,0x000000, 0x000066,0x003366,0x006666,0x006633,0x006600,0x336600,0x666600,0x663300,0x660000,0x660033,0x660066,0x330066,0x202020, 0x000099,0x004C99,0x009999,0x00994C,0x009900,0x4C9900,0x999900,0x994C00,0x990000,0x99004C,0x990099,0x4C0099,0x404040, 0x0000CC,0x0066CC,0x00CCCC,0x00CC66,0x00CC00,0x66CC00,0xCCCC00,0xCC6600,0xCC0000,0xCC0066,0xCC00CC,0x6600CC,0x606060, 0x0000FF,0x0080FF,0x00FFFF,0x00FF80,0x00FF00,0x80FF00,0xFFFF00,0xFF8000,0xFF0000,0xFF007F,0xFF00FF,0x7F00FF,0x808080, 0x3333FF,0x3399FF,0x33FFFF,0x33FF99,0x33FF33,0x99FF33,0xFFFF33,0xFF9933,0xFF3333,0xFF3399,0xFF33FF,0x9933FF,0xA0A0A0, 0x6666FF,0x66B2FF,0x66FFFF,0x66FFB2,0x66FF66,0xB2FF66,0xFFFF66,0xFFB266,0xFF6666,0xFF66B2,0xFF66FF,0xB266FF,0xC0C0C0, 0x9999FF,0x99CCFF,0x99FFFF,0x99FFCC,0x99FF99,0xCCFF99,0xFFFF99,0xFFCC99,0xFF9999,0xFF99CC,0xFF99FF,0xCC99FF,0xE0E0E0, 0xCCCCFF,0xCCE5FF,0xCCFFFF,0xCCFFE5,0xCCFFCC,0xE5FFCC,0xFFFFCC,0xFFE5CC,0xFFCCCC,0xFFCCE5,0xFFCCFF,0xE5CCFF,0xFFFFFF}

表创建的调色板。

这个算法表从左到右创建了 13 种颜色,从上到下创建了 9 种色调。从这个角度考虑,它似乎以一定的对称性排列。最终的输出在图中清晰可见。我们该如何解决这个问题?
我在下面添加了一个计算代码。但它甚至与我的表格列表相差甚远。我的目标是制作一个使用 lua 代码生成相同算法(生成色调的 RGB 十六进制代码)的函数,而不使用表格。

编辑:我认为通过从表中取出两行(26种色调)可以得到最接近的结果如下:

local base_colors = {0x000033, 0x001933, 0x003333, 0x003319, 0x003300, 0x193300, 0x333300, 0x331900, 0x330000, 0x330019, 0x330033, 0x190033, 0x000000}

local special_colors = {0x0000FF, 0x0080FF, 0x00FFFF, 0x00FF80, 0x00FF00, 0x80FF00, 0xFFFF00, 0xFF8000, 0xFF0000, 0xFF007F, 0xFF00FF, 0x7F00FF, 0xFFFFFF}

local function calculate_shades(base_color)
    local shades = {}
    local step = 0x22

    for i = 0, 7 do
        local red = ((base_color // 0x10000) & 0xFF)
        local green = ((base_color // 0x100) & 0xFF)
        local blue = (base_color & 0xFF)

        red = math.min(255, red + i * step)
        green = math.min(255, green + i * step)
        blue = math.min(255, blue + i * step)

        local shade = (red << 16) + (green << 8) + blue
        shades[#shades + 1] = shade
    end

    table.insert(shades, base_color)
    return shades
end

local function generate_color_table(base_colors, special_colors)
    local color_table = {}
    local special_index = 1
    for base_index, base_color in ipairs(base_colors) do
        local shades = calculate_shades(base_color)
        for shade_index, shade in ipairs(shades) do
            if (base_index - 1) * 9 + shade_index == special_index * 9 then
                table.insert(color_table, special_colors[special_index])
                special_index = special_index + 1
            else
                table.insert(color_table, shade)
            end
        end
    end
    return color_table
end

local result = "newClrTbl = {"

local color_table = generate_color_table(base_colors, special_colors)
for i = 1, #color_table do
    if i == #color_table then
        result = result .. (string.format("0x%06X", color_table[i]))
    else
        result = result .. (string.format("0x%06X,", color_table[i]))
    end
end

print(result.."}")

带有最后编辑的代码输出的面板

代码浪费似乎还很多。有没有代码可以不使用表格,而是根据主表中的色调来实现这个算法?

lua
  • 1 个回答
  • 59 Views
Martin Hope
GrandpaKartul
Asked: 2025-02-27 00:12:10 +0800 CST

尝试使用“humanoid”索引 nil(Roblox Studio)

  • 5

我正在尝试编写一个炮塔代码,当敌人进入炮塔射程时向敌人射击,但代码有时会中断并给出错误信息。Script:31: attempt to index nil with 'Humanoid' 这种情况很少发生,只有当僵尸死亡时才会发生。不仅如此,似乎有些子弹造成的伤害比实际伤害要大得多。

head = script.Parent.PrimaryPart

local function triggershoot(part)
    local beam = Instance.new("Part",script.Parent)

    beam.Anchored = true
    beam.CanCollide = false
    beam.Shape = "Block"
    beam.CFrame = head.CFrame
    beam.Size = Vector3.new(0.5,0.5,0.5)
    beam.Material = "Plastic"
    beam.BrickColor = BrickColor.new("Dark taupe")

    beam.CFrame = CFrame.lookAt(head.Position,part.Position)
    for i = 0, 50, 1 do
        wait()
        beam.CFrame = beam.CFrame + beam.CFrame.LookVector      
        beam.Touched:Connect(function(plr)
            if plr.Parent:HasTag("enemy") then
                plr.Parent.Humanoid:TakeDamage(3)
                beam:Destroy()
            end
        end)
    end
end

while true do
    wait()
    local parts = workspace:GetPartsInPart(script.Parent.zone)
    for _, part in pairs(parts) do
        if part:HasTag("enemy") and part.Parent.Humanoid.Health > 0 then

            local update = CFrame.lookAt(head.Position,part.Position)
            head.CFrame = update
            coroutine.wrap(triggershoot)(part)
            wait(1)
        end
    end
end
lua
  • 2 个回答
  • 47 Views
Martin Hope
Daniel Wagner
Asked: 2025-01-01 06:48:26 +0800 CST

如何将 luv 与管道一起使用?

  • 6

我正在尝试使用luv构建一个 NES 模拟器插件,该插件可以在不暂停游戏模拟的情况下与另一个进程通信。当我通过手动输入数据进行测试时,我遇到了一些运行顺利的事情,但是当我通过管道测试与另一个进程通信时,lua 脚本似乎从未收到任何数据。

作为最小可重现示例,使用以下 lua 脚本:

local uv = require("luv")
local stdin = uv.new_poll(1)
stdin:start("r", function() print("uv callback") end)
uv.run("once")

当我手动按下回车键时,一切都按预期进行:

% lua-5.1 min.lua
    
uv callback
%

但是,通过管道从另一个程序传递空行似乎不起作用:

% echo | lua-5.1 min.lua
-- nothing happens, and lua-5.1 does not exit

我相信,通过额外的测试,这不是一个缓冲问题:编写一个手动刷新以代替echo并添加io.stdin:setvbuf("no")到 lua 脚本顶部的程序不会改变行为。 (事实上,从实验上看,它似乎以某种方式直接连接到终端:手动按下 Enter 仍然会导致回调运行并且程序退出!)

为什么我的脚本看不到管道输入的数据,我该如何改变它才能看到它?

lua
  • 1 个回答
  • 23 Views
Martin Hope
SJC
Asked: 2025-01-01 05:40:42 +0800 CST

通过远程函数传递模型

  • 5

我无法通过远程事件传递模型

模型(塔)最初存储在复制存储中,然后被克隆并移动到工作区(本地脚本)中的文件夹

tower = game.ReplicatedStorage.Towers.Boxer:Clone()
        
tower.Parent = workspace.Map.TowersToPlace

然后我将其传递通过远程事件。

print(tower)    replicatedStorage.SpawnTowerEvent:FireServer(tower, mouse.Hit.Position)
end)

打印行正确打印了塔,但服务器脚本错误地指出塔变量为零(服务器脚本)

game.ReplicatedStorage.SpawnTowerEvent.OnServerEvent:Connect(function(plr, towerToPlace, pos)
    print(towerToPlace)
end)

-- 返回 nil

任何人都知道为什么变量没有被传递,尽管在本地脚本中正确定义了它。

lua
  • 1 个回答
  • 37 Views
Martin Hope
Naruto_333
Asked: 2024-12-30 08:03:00 +0800 CST

Roblox:函数不循环或增加“金钱”值

  • 5

我正在编写一个 Roblox 游戏,我需要一个循环的计时器,并且它必须添加到金钱 IntValue 中。我测试了代码,但它没有循环或添加到金钱值。我该如何解决这个问题?没有发生任何错误。这是计时器脚本的代码。它在本地脚本中。

local minutes = 0
local seconds = 15

local player = game.Players.LocalPlayer
local leaderstats = player:FindFirstChild("leaderstats")
local money = leaderstats:FindFirstChild("Effect Coins")

while true do
    for i = 1, 15 do
        wait(1)
        if seconds == 0 then
            minutes = minutes - 1
            secconds = 59
        else
            seconds = seconds - 1
        end
        
        if seconds < 10 then
            script.Parent.Text = tostring(minutes)..":0"..tostring(seconds)
        else
            script.Parent.Text = tostring(minutes)..":"..tostring(seconds)
        end
    end
    
    money += 1
    minutes = 0
    seconds = 15
    
end

我尝试改变时间长度的值,但似乎不起作用。

lua
  • 1 个回答
  • 30 Views
Martin Hope
user28944982
Asked: 2024-12-27 01:00:29 +0800 CST

IUPLUA 使用 table.unpack 将元素放入 .gridbox 不起作用

  • 5
local gridBox = iup.gridbox{
    table.unpack(Instances),
    --Instances[1],
    --Instances[2],
    numcolumns = 3,
    alignment = "ACENTER",
    expand = "YES"
}

当我在 VSCode 中运行它时,它将仅显示实例表的 1 个元素,这始终是随机的,但是如果我使用例如实例 [1] 来执行此操作,则它们将显示高达 100%。然而,我需要它更“动态”

尝试直接放入表格中

local gridBox = iup.gridbox{
    Instances,
    numcolumns = 3,
    alignment = "ACENTER",
    expand = "YES"
}

就像前面提到的实例[1]

lua
  • 1 个回答
  • 19 Views
Martin Hope
Андрей Дов
Asked: 2024-12-23 20:51:49 +0800 CST

如何在 Lua 中扩展类

  • 6

使用 lib classic。我有以下代码:

Combination = Object:extend()

function Combination:new(level, score)
self.curentCombinationValues = 0
self.curentCombination = {}
self.level =  level
self.score =  score 
end

NonPair = Combination:extend()

function NonPair:new()
NonPair.super:new(1, 2)
end

OnePair = Combination:extend()

function OnePair:new()
OnePair.super:new(1, 3)
end

当我创建两个对象时,第二个对象会替换继承对象的变量,这意味着第一个对象也会发生变化。

local one = NonPair()
local second = OnePair()

one.level = second.level 。为什么?

lua
  • 1 个回答
  • 45 Views
Martin Hope
shingo.nakanishi
Asked: 2024-12-18 08:43:55 +0800 CST

如何使用 Lua 中的方法扩展现有类型,类似于 Swift 扩展或 JavaScript 原型?

  • 6

在 Swift 中,您可以使用扩展向现有类型添加方法,而在 JavaScript 中,您可以使用原型执行相同操作。如何在 Lua 中实现类似的功能?

我想给数字添加一个限制功能。

如果这不可能的话,请告诉我。

lua
  • 1 个回答
  • 22 Views
Martin Hope
frankie
Asked: 2024-12-05 23:34:00 +0800 CST

Lua 中的 JavaScript 的 proxy.apply 处理程序

  • 6

在 JavaScript 中,你可以创建一个可调用的对象,如下所示:

const prox = new Proxy(function() {}, {
  get(target, key) { return true }
  apply(target, that, argList) { console.log('This came from a proxy') }
})
prox() // This came from a proxy
console.log(prox.name) // true

对于我正在处理的函数,我希望有类似的东西,并且有一个可以调用的方法。

local function describe()
  -- ...
end
function describe.skip()
  -- ...
end

这不起作用,因为函数不是表。

理想情况下这是可能的:

local describe = {}

function describe.__apply()
  -- ...
end
function describe.skip()
  -- ...
end

describe()
describe.skip()
lua
  • 1 个回答
  • 21 Views
Martin Hope
Masquue
Asked: 2024-11-18 03:12:50 +0800 CST

`io.read("*all")` 中的 "*all" 是什么意思?

  • 6

我知道 format"*a"是用来读取整个文件的,"*l"用来读取一行。但是"*all"(在《Lua 编程》一书中)是什么意思呢?我也在"*line"一些网页上看到过。

Lua 参考仅指定了那些单字符格式,并没有提及更长的格式。

一开始我以为,包含多个字符的格式意味着要单独读取每个格式,比如"*nn"会读取两个数字,"*ll"会读取两行。但事实似乎并非如此。

我发现的唯一关于此事的地方是Reddit 上的一条评论

但是“umber”是噪音字符串。您依赖 file.read 的实现来忽略星号格式的第二个字符之后的格式说明符中的所有字符。如果这种情况发生变化怎么办?

"*all"那么等等的正确行为是什么,或者它是否真的被定义了?

ps:我使用的是Lua 5.3,但我检查过的其他版本的相关参考是相同的。

lua
  • 1 个回答
  • 31 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve