【问题标题】:How to move an image in Lua?如何在 Lua 中移动图像?
【发布时间】:2016-12-20 05:30:57
【问题描述】:

我是 Lua 编程的新手,在尝试将图像从一组坐标移动到另一个坐标时遇到问题。

我正在尝试创建的是与 X-Plane 飞行模拟器一起使用。有一个名为 SASL (www.1-sim.com) 的库,它的创建是为了使插件(用于 X-Plane)的创建更容易,因为默认语言是 C++,很多人觉得很难。

通常,SASL 充当 Lua 和 X-Plane 之间的桥梁,一般来说,您编写的脚本在 X-Plane (DataRefs) 运行时直接从 X-Plane (DataRefs) 读取一些数据,具体取决于您编写的代码执行命令或许多其他可能的事情。

因此,当使用 SASL 创建驾驶舱/面板仪表时,它使用一个名为“avionics.lua”的基本文件,该文件作为一个类工作,并加载您为正在处理的特定飞机创建的所有仪表。例如,我的 avionics.lua 文件如下所示:

size = { 2048, 2048 }

components = {
flaps {};
};

其中,'size' 是用于绘制的东西的大小,components 是一个仪表数组,在本例中是襟翼仪表。

剩下的工作是创建仪表功能,这是在一个单独的文件中完成的,在我的例子中,称为“flaps.lua”。

在flaps.lua 中,我需要编写襟翼指示器功能来加载2 张图像:一张用于背景,第二张用于襟翼指示器。

第一张图片是固定图片。第二个将根据襟翼指示器 DataRef(下面的襟翼度属性)沿“y”轴移动。

当 X-Plane 运行时,下面的代码会在其第一阶段显示背景图像和襟翼指示器,如您在图像上看到的那样为 0。

size = {78,100}

local flapsDegree = globalPropertyf("sim/cockpit2/controls/flap_ratio")
local background = loadImage("gfx/Flaps.png")
local indicator = loadImage("gfx/Flaps_Indicator.png")
local flaps = get(flapsPosition)

components = {
texture { position = {945, 1011, 60, 100}, image = background},
texture { position = {959, 1097, 30, 9},   image = indicator},
}

图片

现在,当我需要实现将“指标”图像通过“y”轴移动的逻辑时,问题就来了。

我试过这段代码没有成功:

if flaps == 0.333 then
indicator.position = {959, 1075, 30, 9}
end

那我该怎么做呢?

【问题讨论】:

  • 我只能假设您在谈论这个库github.com/der-On/sasl,因为本机 Lua 不提供任何这些功能。请添加更多信息。我不应该用谷歌搜索你在说什么代码......
  • 是的,这是正确的。告诉我您需要哪些信息,以便我提供给您。
  • 告诉我们更多关于你的项目,你使用了哪些库,也许是一些你想要什么以及你得到什么的屏幕截图等等......到目前为止,我的印象是你甚至没有阅读该库的文档,因为它描述了如何在特定坐标处绘制东西。我敢肯定,您还有超过 8 行代码可以与我们分享。
  • 来自 github 的文档非常过时,当前的 SASL 在这里:www.1-sim.com。至于阅读文档,我已经阅读过,问题是文档只有对每个功能的描述,没有使用示例,这对我来说很复杂。至于代码,flaps.lua 文件中的所有代码都已经在帖子中了。如果您希望我们可以在此处打开聊天或Skype,我认为这会更好。
  • 我不知道那个库。 99.999% 的用户也会在这里。所以如果你想帮助你更好地编辑你的问题,假设你问的人不知道你在说什么。只是对编程语言有很好的理解以及阅读文档和使用其他库的经验。其他所有重要的事情,比如你有什么文件,它们如何协同工作都应该来自你。

标签: image lua


【解决方案1】:

我不熟悉 SALS 库。我只是快速浏览了一下。

您需要了解的一切都在您链接的网站的手册中。 特别是http://www.1-sim.com/files/SASL300.pdf

每次更新屏幕时,都会调用每个组件的 draw() 函数。

因此,如果您想动态更改某些内容,则必须将其放入组件的绘制函数中。

如果您打开 SALS 源代码,您会发现向您展示如何使用这些东西的基本组件。其中之一是needle.lua:

-- default angle
defineProperty("angle", 0)

-- no image
defineProperty("image")


function draw(self)
    local w, h = getTextureSize(get(image))

    local max = w
    if h > max then
        max = h
    end

    local rw = (w / max) * 100
    local rh = (h / max) * 100
    drawRotatedTexture(get(image), get(angle), 
        (100 - rw) / 2, (100 - rh) / 2, rw, rh)
end

如果您查看手册,您会发现不仅有一个 drawRotatedTexture 函数,还有许多其他用于绘制东西的函数。随便玩玩。根据您的目的尝试 drawTexture。

如果您不知道要编程什么,请打开库中的每个 lua 文件,并将其与 Lua 参考手册和 SALS 文档一起阅读,直到您了解发生了什么。一旦你理解了现有的代码,你就可以轻松地对其进行扩展。

【讨论】:

    猜你喜欢
    • 2013-04-21
    • 2015-09-05
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多