当SKScene
调用func didBegin(_ contact: SKPhysicsContact)
时发生联系时,有必要确定哪个SKPhysicsBody
是contact.bodyA
哪个是contact.bodyB
。但是,在调用函数之前,我没有成功发现它是如何设置的。这导致了不成功的向下转换(例如导致应用程序崩溃的(contact.bodyA.node! as! MySpriteNode)
。
我对模式的理论涉及它由应用程序节点树中SKNode
个对象的排序或它们在场景self.childen
中的顺序决定,但事实证明这是不正确的。有时,self.children
之后的节点比bodyB.node
最终为bodyA.node
。我还发现没有涉及categoryBitMask
或contactTestBitMask
的值的模式。
Apple的最新文档似乎对此问题保持沉默。他们是否保证哪个机构将是哪个?我不想为每个配对方向编写相同的代码,我确信这不是预期的方法。
答案 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 { }