kotlin 可重复纹理libgdx

zbdgwd5y  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(138)

我有一个纹理和一个包含它的纹理区域。我想在一个方向上重复它,在另一个方向上拉伸它。有什么想法吗?
如果我们想在两个方向上重复它,我们称之为

textureRegion.texture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat)

但我正在创建边缘,并希望在x轴拉伸图像,并在y轴重复。

textureRegion.texture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Default)

但是TextureWrap枚举中没有这样的值。
Texture.TextureWrap.ClampToEdge不适合这里,因为它基本上是重复纹理的边缘像素,而不是整体拉伸。

bbmckpt7

bbmckpt71#

最后。经过所有的尝试,我得到了如何得到我需要的效果。张贴一个答案的情况下,如果有人会需要同样的效果:

fun modifyRepeatStyle(_horizontalWrap: Texture.TextureWrap?, _verticalWrap: Texture.TextureWrap?,
                      width: Float=textureRegion.texture.width.toFloat(), height: Float=textureRegion.texture.height.toFloat()){
    var horizontalWrap = _horizontalWrap
    var verticalWrap = _verticalWrap
    repeatHorizontal = _horizontalWrap != null //class variable
    repeatVertical = verticalWrap != null  //class variable
    if (horizontalWrap == null){
        //resize texture if you need
        horizontalWrap = Texture.TextureWrap.ClampToEdge
    }
    if (verticalWrap == null){
        //resize texture if you need
        verticalWrap = Texture.TextureWrap.ClampToEdge
    }
    textureRegion.texture.setWrap(horizontalWrap, verticalWrap)
}

稍后在代码中重写Image.setSize()方法并将其粘贴到此处:

var regionWidth = width.toInt()
var regionHeight = height.toInt()
if (!repeatHorizontal)
    regionWidth = textureRegion.texture.width
if (!repeatVertical)
    regionHeight = textureRegion.texture.height
textureRegion.setRegion(0,0, regionWidth, regionHeight)
drawable = TextureRegionDrawable(textureRegion)
super.setSize(width, height)

相关问题