如何在 Roblox Studio 中获取缩放 image/frame 的 rendered/displayed 大小
How to get the rendered/displayed size of a scaled image/frame in Roblox Studio
我需要获取帧内图像的宽度和高度。框架和图像都使用 Scale
属性 而不是 Offset
属性 来设置大小。我在图像所在的框架上有一个 UIAspectRatioConstraint
。一切都随屏幕尺寸缩放。
但是,我需要能够获取图像(或帧)的当前 width/height,以便我可以执行一些数学函数,以便将图像上的标记移动到特定位置(X,Y)。我无法获取 image/frame 的大小,因此无法更新位置。
有没有办法获取使用 Scale
大小选项和 UIAspectRatioConstraint
的图像或帧的当前渲染宽度?
我困了。我希望这是有道理的...
我目前在另一个使用 Offset
而不是 Size
的图像上获得位置的数学是:
local _x = (_miniMapImageSize.X.Offset / _worldCenterSize.X) * (_playerPos.X - _worldCenterPos.X) + (_miniMapFrameSize.X.Offset / 2)
local _y = (_miniMapImageSize.Y.Offset / _worldCenterSize.Z) * (_playerPos.Z - _worldCenterPos.Z) + (_miniMapFrameSize.Y.Offset / 2)
这让我知道了玩家在我的迷你地图中的位置。但这并没有扩展。实际地图确实如此,我还需要在该地图上定位玩家的标记。
解决方法
现在(对于其他正在寻找解决方案的人),我已经创建了一个解决方法。我现在指定我的实际图像大小:
local _mapSize = Vector2.new(814, 659)
然后我使用屏幕宽度和高度来决定是否需要基于 x 轴或 y 轴进行缩放。 (缩放我的数学公式,而不是图像。)
if (_mouse.ViewSizeX / _mouse.ViewSizeY) - (_mapSize.X / _mapSize.Y) <= 0 then
-- If the width of the screen is at the same or smaller ratio with the height of the screen
-- then calculate the new size based off the width
local _smallerByPercent = (_mouse.ViewSizeX * 0.9) / _mapSize.X
_mapWidth = _mapSize.X * _smallerByPercent
mapHeight = _mapSize.Y * _smallerByPercent
else
local _smallerByPercent = (_mouse.ViewSizeY * 0.9) / _mapSize.Y
_mapWidth = _mapSize.X * _smallerByPercent
_mapHeight = _mapSize.Y * _smallerByPercent
end
之后,我可以在我的地图上为我的标记创建位置。
_x = ((_mapWidth / _worldCenterSize.X) * (_playerPos.X - _worldCenterPos.X)) * -1
_y = ((_mapHeight / _worldCenterSize.Z) * (_playerPos.Z - _worldCenterPos.Z)) * -1
_mapCharacterArrow.Position = UDim2.new(0.5, _x, 0.5, _y)
现在,当我按 "M" 打开大地图时,我的标记可以放置在我的角色所在的位置。
然而
我仍然很想知道一种获取 rendered/displayed 图像大小的方法...我试图做到这一点,而不必在脚本中手动输入图像大小。我希望它是动态的。
所以似乎有一个 属性 的大多数 GUI 元素称为 AbsoluteSize
。这是元素的实际显示大小,无论它缩放到什么。 (并不是说它在缩放时保持不变,而是在缩放时发生变化以提供新的尺寸。)
有了这个,我能够将我的代码重写为:
local _x = (_mapImageSize.X / _worldCenterSize.X) * (_playerPos.X - _worldCenterPos.X) * -1
local _y = (_mapImageSize.Y / _worldCenterSize.Z) * (_playerPos.Z - _worldCenterPos.Z) * -1
_mapCharacterArrow.Position = UDim2.new(0.5, _x, 0.5, _y)
其中 _mapImageSize = [my map image].AbsoluteSize
.
比以前好多了。
我需要获取帧内图像的宽度和高度。框架和图像都使用 Scale
属性 而不是 Offset
属性 来设置大小。我在图像所在的框架上有一个 UIAspectRatioConstraint
。一切都随屏幕尺寸缩放。
但是,我需要能够获取图像(或帧)的当前 width/height,以便我可以执行一些数学函数,以便将图像上的标记移动到特定位置(X,Y)。我无法获取 image/frame 的大小,因此无法更新位置。
有没有办法获取使用 Scale
大小选项和 UIAspectRatioConstraint
的图像或帧的当前渲染宽度?
我困了。我希望这是有道理的...
我目前在另一个使用 Offset
而不是 Size
的图像上获得位置的数学是:
local _x = (_miniMapImageSize.X.Offset / _worldCenterSize.X) * (_playerPos.X - _worldCenterPos.X) + (_miniMapFrameSize.X.Offset / 2)
local _y = (_miniMapImageSize.Y.Offset / _worldCenterSize.Z) * (_playerPos.Z - _worldCenterPos.Z) + (_miniMapFrameSize.Y.Offset / 2)
这让我知道了玩家在我的迷你地图中的位置。但这并没有扩展。实际地图确实如此,我还需要在该地图上定位玩家的标记。
解决方法
现在(对于其他正在寻找解决方案的人),我已经创建了一个解决方法。我现在指定我的实际图像大小:
local _mapSize = Vector2.new(814, 659)
然后我使用屏幕宽度和高度来决定是否需要基于 x 轴或 y 轴进行缩放。 (缩放我的数学公式,而不是图像。)
if (_mouse.ViewSizeX / _mouse.ViewSizeY) - (_mapSize.X / _mapSize.Y) <= 0 then
-- If the width of the screen is at the same or smaller ratio with the height of the screen
-- then calculate the new size based off the width
local _smallerByPercent = (_mouse.ViewSizeX * 0.9) / _mapSize.X
_mapWidth = _mapSize.X * _smallerByPercent
mapHeight = _mapSize.Y * _smallerByPercent
else
local _smallerByPercent = (_mouse.ViewSizeY * 0.9) / _mapSize.Y
_mapWidth = _mapSize.X * _smallerByPercent
_mapHeight = _mapSize.Y * _smallerByPercent
end
之后,我可以在我的地图上为我的标记创建位置。
_x = ((_mapWidth / _worldCenterSize.X) * (_playerPos.X - _worldCenterPos.X)) * -1
_y = ((_mapHeight / _worldCenterSize.Z) * (_playerPos.Z - _worldCenterPos.Z)) * -1
_mapCharacterArrow.Position = UDim2.new(0.5, _x, 0.5, _y)
现在,当我按 "M" 打开大地图时,我的标记可以放置在我的角色所在的位置。
然而
我仍然很想知道一种获取 rendered/displayed 图像大小的方法...我试图做到这一点,而不必在脚本中手动输入图像大小。我希望它是动态的。
所以似乎有一个 属性 的大多数 GUI 元素称为 AbsoluteSize
。这是元素的实际显示大小,无论它缩放到什么。 (并不是说它在缩放时保持不变,而是在缩放时发生变化以提供新的尺寸。)
有了这个,我能够将我的代码重写为:
local _x = (_mapImageSize.X / _worldCenterSize.X) * (_playerPos.X - _worldCenterPos.X) * -1
local _y = (_mapImageSize.Y / _worldCenterSize.Z) * (_playerPos.Z - _worldCenterPos.Z) * -1
_mapCharacterArrow.Position = UDim2.new(0.5, _x, 0.5, _y)
其中 _mapImageSize = [my map image].AbsoluteSize
.
比以前好多了。