当doBegin(_ :)被调用时,他们是否保证哪个身体是bodyA和bodyB?

时间:2016-10-08 18:31:46

标签: swift sprite-kit

SKScene调用func didBegin(_ contact: SKPhysicsContact)时发生联系时,有必要确定哪个SKPhysicsBodycontact.bodyA哪个是contact.bodyB。但是,在调用函数之前,我没有成功发现它是如何设置的。这导致了不成功的向下转换(例如导致应用程序崩溃的(contact.bodyA.node! as! MySpriteNode)

我对模式的理论涉及它由应用程序节点树中SKNode个对象的排序或它们在场景self.childen中的顺序决定,但事实证明这是不正确的。有时,self.children之后的节点比bodyB.node最终为bodyA.node。我还发现没有涉及categoryBitMaskcontactTestBitMask的值的模式。

Apple的最新文档似乎对此问题保持沉默。他们是否保证哪个机构将是哪个?我不想为每个配对方向编写相同的代码,我确信这不是预期的方法。

1 个答案:

答案 0 :(得分:2)

无法保证联系变量内部的主体顺序,但我们可以保证我们在方法内部的顺序。

假设您有3个实体使用SKPhysicsBody

 Scanner kbd = new Scanner (System.in);
            int count = 1;
            int largest = 0;

            System.out.println("Enter number");
            int numbers = kbd.nextInt();
            int[] numb = new int[numbers];
            System.out.println("Now enter "+numbers+" integers:");
            for(int i =0; i<numb.length;i++){
                numb[i] = kbd.nextInt();
            }
            System.out.println("Now enter the key integer: ");
            int key = kbd.nextInt();

            for (int i = 0; i<numb.length-1; i++) {
            if (numb[i] == key) {
                if (numb[i] == numb[i + 1]) {
                     count++;
                    }
            else {
                    largest = Math.max(largest, count);
                    count = 1;

                  }
           }
    }

            System.out.println("Largest number of consecutive times "+key+" was entered: "+largest);

您可以像这样组织didBegin(_ contact :)方法

class Hero: SKSpriteNode { }
class Enemy: SKSpriteNode { }
class Gun: SKSpriteNode { }