2016-06-27 9 views
0

私はこのコードを作成することを、プレイヤーが三角形メッシュを持って、SpriteKitベースを使用してスウィフトにIOSのゲームを作っています:スウィフトSpriteKitベースの変更枠形状

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として使ってみましたが、intersectsNodeの代わりにcontainsPointを使ってみました。

フレームをどのように変更すればいいですか?交差を検出する方法は、三角形の内側にある場合のみスプライトを検出しますか?

+0

そのような種類の検出が必要な場合は、SKPhysicsBodyを使用する必要があります – Knight0fDragon

+0

SKShapeにはまだ問題がありますので、SKShapeを作成してから、ビューの内部にtextureFromNodeという名前のテクスチャを作成することをおすすめしますまたは、新しいSKViewをスポーンすることはできますが、問題はありません)、そのテクスチャをSKSpriteNodeにフィードします。その後、あなたのSKPhysicsBodyを使用すると、希望の形状に基づいて衝突を処理できるはずです – Knight0fDragon

+0

@ Knight0fDragonどのようにして、物理的なボディをノードに追加すれば、どうやって互いに影響を与えるのを止めることができますか。お互いを押す? – HarveyBrCo

答えて

1

私はあなたの物理学を設定するために開始するに役立ちますいくつかのコードを記述します。

(私はいけないPS私はただの例を作るためにplayerviewを使って選手だった、どのタイプを知っている...)

enum CollisionTypes: UInt32 { 
    case Playerview = 1 // my hero 
    case WarField = 2 // the warfield 
    case Enemy1 = 4 // simple enemies type 
    case Enemy2 = 8 // 2 level enemies type 
    case Enemy3 = 16 // boss enemies type 
    case Enemy4 = 32 // boss of the boss enemies type 
} 


playerview.physicsBody = SKPhysicsBody(texture: texture, size: texture.size()) 
playerview.physicsBody!.categoryBitMask = CollisionTypes.Playerview.rawValue 
playerview.physicsBody!.contactTestBitMask = CollisionTypes.Enemy1.rawValue | CollisionTypes.Enemy2.rawValue | CollisionTypes.Enemy3.rawValue | CollisionTypes.Enemy4.rawValue 
playerview.physicsBody!.collisionBitMask = 0 

func didBeginContact(contact: SKPhysicsContact) { 
    if (contact.bodyA.categoryBitMask == CollisionTypes.Playerview.rawValue && 
      contact.bodyB.categoryBitMask == CollisionTypes.Enemy1.rawValue) { 
     print("The collision was between the playerview and a enemy1") 
    } 
    ... 
} 
関連する問題