swift - 如何在spritekit tilemap中设置tileset的不透明度?
问题描述
我有一个代码来为 tilemap 中的每个瓦片定义 PhysicsBody,如下所示:
func setUpSceneWithMap(map: SKTileMapNode) {
let tileMap = map
tileMap.setScale(0.4)
let startingLocation: CGPoint = tileMap.position
let tileSize = tileMap.tileSize
let halfWidth = CGFloat(tileMap.numberOfColumns) / 2.0 * tileSize.width * 0.4
let halfHeight = CGFloat(tileMap.numberOfRows) / 2.0 * tileSize.height * 0.4
for col in 0..<tileMap.numberOfColumns {
for row in 0..<tileMap.numberOfRows {
if tileMap.tileDefinition(atColumn: col, row: row) != nil {
// defining different types of tile
let tileDefinition = tileMap.tileDefinition(atColumn: col, row: row)
...
let isTrapTile = tileDefinition?.userData?["isTraps"] as? Bool
let x = CGFloat(col) * (tileSize.width) * 0.4 - halfWidth
let y = CGFloat(row) * (tileSize.height) * 0.4 - halfHeight
let rect = CGRect(x: 0, y: 0, width: tileSize.width * 0.4 , height: tileSize.height * 0.4)
let tileNode = SKShapeNode(rect: rect)
tileNode.position = CGPoint(x: x + startingLocation.x, y: y + startingLocation.y)
tileNode.zPosition = 1
tileNode.physicsBody = SKPhysicsBody(edgeLoopFrom: rect)
// Create the 4 checkpoint-tiles at the center of the maze
...
// Create the wall tile
...
// Create the trap tile
if (isTrapTile ?? false) {
tileNode.physicsBody?.categoryBitMask = gamePhysics.Trap
tileNode.physicsBody?.collisionBitMask = 0
tileNode.physicsBody?.contactTestBitMask = gamePhysics.Player
tileNode.physicsBody?.isDynamic = false
}
self.addChild(tileNode)
}
}
}
}
我的瓦片地图中有 3 种不同的瓦片集:墙、检查点和陷阱。使用上面的代码,我已经为它们分配了一个带有物理体的 Spritenode。现在,我希望我的陷阱图块不可见,这样玩家就看不到它。实现它的最有效方法是什么?
解决方案
你会使用myNode.alpha = CGFloat;
. 这仅影响从 SKNode 继承的节点。
根据苹果文档的myNode.alpha
价值:
默认值为 1.0。
SKNode 类不执行绘图,但它的许多子类执行。当绘制节点或其任何后代时,每个像素的 alpha 分量乘以节点的 alpha 属性,然后钳制在 0.0-1.0 范围内。此修改后的 alpha 值用于将像素混合到帧缓冲区中
基本上,alpha 值会影响精灵在帧图中的渲染方式。
在您的情况下,您会设置myTrapTileNode.alpha = 0.0;
,因为您希望它完全透明。
推荐阅读
- angular - 在使用响应式表单时将模板引用变量绑定到 ngModel
- postgresql - 如何在 Postgres 中获取简短的日期名称,例如“Mon”、“Tue”、“Wed”
- flutter - 将回调从模型传递到 Flutter 中的 GestureDetector 的语法
- ajax - Spring mvc使用AJAX一次上传多个文件不起作用
- c# - FFmpeg 停止进程 C#
- ssh - git 与其他 github 电子邮件一起提交?
- swift - 来自字符串插值的警告
- c# - 在 Assembly.GetExecutingAssembly 中执行代码的反射返回 null
- sql - Ms Access 查询计数优先
- zapier - ajv-keywords@3.2.0 需要一个对等的 ajv@^6.0.0