如何调整多图尺寸以适配SKSpriteNode固定帧(拉伸/收缩)
解决SKSpriteNode替换纹理时保持固定尺寸的问题
你之前的方法之所以失效,是因为用了resize: true——这个参数会让节点跟着新纹理的尺寸走,完全违背了你要固定节点帧的需求。要让新纹理像气球一样拉伸/收缩填满固定的节点“鞋盒”,按下面的方法来:
正确的替换方式
方法1:直接赋值纹理(最简洁)
直接给节点的texture属性赋值新纹理,默认不会改变节点尺寸,再配合设置scaleMode为.resizeFill,就能让纹理完全铺满你预先设定的节点大小:
let newTexture = SKTexture(imageNamed: newImage) myTarget.texture = newTexture // 强制纹理拉伸/压缩至节点尺寸,填满整个帧 myTarget.scaleMode = .resizeFill
方法2:用SKAction切换(适合动画场景)
如果需要用动作来做纹理切换动画,只要把resize参数设为false,同样要确保scaleMode设置正确:
let newTexture = SKTexture(imageNamed: newImage) let changeImgAction = SKAction.setTexture(newTexture, resize: false) myTarget.scaleMode = .resizeFill myTarget.run(changeImgAction)
关键细节补充
scaleMode的可选值:.resizeFill:完全忽略纹理原始宽高比,强制拉伸/压缩到和节点尺寸一致,正好匹配你“填满鞋盒”的需求- 如果不想让纹理变形,可以换成
.aspectFill,但这种模式会裁剪纹理边缘来填满节点,你可以根据实际需求调整
- 只要你不主动修改
myTarget.size,也不在替换纹理时开启resize: true,节点的固定帧就会一直保持,对应的物理体也不会受到影响
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

