2017-08-05 59 views
0

我想写一个简单的游戏,通过点击时环(不断变大和变小)在静止环内进行评分,但我无法弄清楚如何检测当两个节点相交时或当移动环位于静止环内时。如果某人在两个节点大小相同的情况下点击,或者如果移动节点位于固定节点内,有人可以向我展示如何添加分数。检测2个节点在每个轴上的相交情况

import SpriteKit 
import GameplayKit 

class GameScene: SKScene { 

    var Circle = SKSpriteNode() 
    var Circle2 = SKSpriteNode() 

    var GameStarted:Bool = false 

    var Path = UIBezierPath() 
    var run1 = false 
    var called = true 
    var intersected = false 


    override func didMove(to view: SKView) { 
     Circle = SKSpriteNode(imageNamed: "Circle") 
     Circle.size = CGSize(width: 100, height: 100) 
     Circle.position = CGPoint(x: self.frame.midX, y: self.frame.midY) 
     self.addChild(Circle) 
     Circle2 = SKSpriteNode(imageNamed: "Circle2") 
     Circle2.size = CGSize(width: 760, height: 760) 
     Circle2.position = CGPoint(x: self.frame.midX, y: self.frame.midY) 
     self.addChild(Circle2) 
     Circle.zPosition = 0.1 
     Circle2.zPosition = 0.2 
     var path = UIBezierPath(arcCenter: CGPoint(x: 15, y: 15), radius: CGFloat(10), startAngle: 0, endAngle: CGFloat(2*Double.pi), clockwise: true) 
     UIColor.blue.setStroke()  
    } 



    func scaleCircle2(){ 
     let duration = 5.0 
     let scaleAction2 = SKAction.scale(to: CGSize(width: 760, height: 760), duration: TimeInterval(duration)) 
     let scaleAction = SKAction.scale(to: CGSize(width: 15, height: 15), duration: TimeInterval(duration)) 
     let pulse = SKAction.sequence([scaleAction,scaleAction2]) 
     let forever = SKAction.repeatForever(pulse) 
     Circle2.run(forever) 


    } 



    func scaleCircleUP(){ 
     let duration2 = 0.5 
     let initialsize = 100 
     let scaleAction3 = SKAction.scale(to: CGSize(width: initialsize + 100, height: initialsize + 100), duration: TimeInterval(duration2)) 
     Circle.run(scaleAction3) 

    } 



    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     GameStarted = true 
     if GameStarted == true{ 
      callCircle2() 
     } 
    } 


    func callCircle2(){ //makes sure scaleCircle2 isn't called twice 
     if called == true{ 
      scaleCircle2() 
     } 
     called = false 
    } 


} 

回答

0

当确定一个圆形物体是否处于另一个较大的圆形物体,只需比较它们的半径与它们的中心之间的距离的差的绝对值。

extension CGPoint { 
    func distanceTo(_ p:CGPoint) -> CGFloat { 
     return sqrt(pow((p.x - x), 2) + pow((p.y - y), 2)) 
    } 
} 

let dist = Float(Circle.position.distanceTo(Circle2.position)) 
let radiusDiff = fabsf(Float((Circle.size.width - Circle2.size.width)) 
if dist < radiusDiff { 
    // smaller circle is in larger circle 
} 

在你的情况,好像你从来没有把他们的来历,你知道哪些对象将是“小”之一,简单地比较它们的半径。

相关问题