【发布时间】:2016-06-28 16:59:35
【问题描述】:
我正在使用 Spritekit 在 Swift 中制作 IOS 游戏,玩家有一个三角形网格,我使用以下代码创建:
let viewpath = CGPathCreateMutable();
CGPathMoveToPoint(viewpath, nil, 200, 0);
CGPathAddLineToPoint(viewpath, nil, 0, 400);
CGPathAddLineToPoint(viewpath, nil, 400, 400);
CGPathAddLineToPoint(viewpath, nil, 200, 0);
let playerviewshape = SKShapeNode(path: viewpath);
playerviewshape.fillColor = SKColor(red: 1, green: 1, blue: 1, alpha: 0.1)
playerviewshape.strokeColor = SKColor(red: 1, green: 1, blue: 1, alpha: 0.2)
playerview = SKSpriteNode(texture: view.textureFromNode(playerviewshape));
playerview.zPosition = 0;
playerview.position = CGPoint(x: 0, y: 200);
player.addChild(playerview);
我想知道三角形内是否有任何敌人,所以在更新循环中我使用if(enemy.intersectsNode(playerview)) { 但是这只检查它是否在节点的框架内,这是三角形周围的一个矩形。我尝试将三角形用作 SKShapeNode,也尝试使用 containsPoint 而不是 intersectsNode。
如何更改框架/检测交叉点的方式,以便仅检测位于三角形内的精灵?
【问题讨论】:
-
如果你想要那种检测,你必须使用 SKPhysicsBody
-
附带说明,SKShape 仍然有很多问题,所以我建议创建您的 SKShape,然后使用您的视图中名为 textureFromNode 的函数制作纹理(或者您可以生成一个新的SKView,没关系),然后将该纹理输入 SKSpriteNode。然后使用您的 SKPhysicsBody,您应该能够根据所需的形状处理碰撞
-
@Knight0fDragon 如果我将物理实体添加到节点,我该如何阻止它们相互影响,.E.G.互相推搡?
-
你将碰撞位掩码设置为 0
-
其实刚刚意识到我应该使用collisionBitMask。
标签: swift sprite-kit