如何在Lua中移动图像?

时间:2016-12-19 11:54:55

标签: image lua

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

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

通常,SASL作为Lua和X-Plane之间的桥梁,在一般情况下,您编写的脚本在运行时直接从X-Plane(DataRefs)读取一些数据,并根据您编写执行的代码命令或许多其他可能的事情。

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

size = { 2048, 2048 }

components = {
flaps {};
};

其中,'size'是用于绘制物体的尺寸,而组件是一系列仪表,在这种情况下是襟翼量规。

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

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

第一张图像是固定图像。第二个将根据襟翼指示器DataRef(下面的flapsDegree属性)在'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},
}

图片enter image description here

现在,当我需要实现通过'y'轴移动'指标'图像的逻辑时,问题出现了。

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

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

那我怎么能做到呢?

1 个答案:

答案 0 :(得分:0)

我不熟悉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文档一起阅读,直到您了解正在进行的操作为止。一旦理解了现有代码,就可以轻松扩展它。