我是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},
}
现在,当我需要实现通过'y'轴移动'指标'图像的逻辑时,问题出现了。
我试过这段代码没有成功:
if flaps == 0.333 then
indicator.position = {959, 1075, 30, 9}
end
那我怎么能做到呢?
答案 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文档一起阅读,直到您了解正在进行的操作为止。一旦理解了现有代码,就可以轻松扩展它。