我一直在開發,將有工作得很好,如果精靈套件沒有這個打我的跟蹤算法......尋路隨着SKNode不工作
我試圖確定CGPoint
是否位於內在我的場景中給定SKNode
的SKPhysicsBody
。我遇到的問題是我似乎無法讓SpriteKit準確地告訴我,物理體是否確實包含了這一點。
下面是可能包含點的機構之一的樣本,以及如何正在測試,看看它:
SKSpriteNode *innerMap1 = [SKSpriteNode spriteNodeWithImageNamed:@"test"];
// FYI - "test" is exactly 363x452. Did that to make sure scaling was not an issue
innerMap1.physicsBody = [SKPhysicsBody bodyWithTexture:[SKTexture textureWithImageNamed:@"test"] size:CGSizeMake(363, 452)];
innerMap1.position = CGPointMake(200, 100);
innerMap1.physicsBody.dynamic = NO;
innerMap1.name = @"testNode";
然後我嘗試兩種不同的方式,看看是否節點包含以下點:
方法1
CGPoint controlPoint = CGPointMake(<xf>, <yf>);
if ([innerMap1 containsPoint:controlPoint]) . . .
方法2
SKPhysicsBody *body = [self.physicsWorld bodyAtPoint:controlPoint];
if ([body.node.name isEqualTo:@"testNode"]) . . .
無論出於何種原因,這兩種方法都沒有幫助。方法1將告訴我該點是否位於節點的框架框內,這違背了從紋理創建獨特節點形狀的目的....方法2出於某種奇怪的原因往往會非常糟糕且不準確。我讀了大約15.5px的超尺度,但我得到的結果是沒有接近這個最小值。
我也只是手動創建一個CGMutablePathRef
並使用以下命令:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInNode:self.scene];
if (CGPathContainsPoint(pathRef, nil, touchLocation, NO)) {
// If we are here it means user did touche physic body.
}
}
但同樣,我想這不要求獨立路徑邊界建立自定義形狀。
SO,我的問題是我做錯了什麼?我很確定,方法2本來是最好的解決方案,或者至少是工作,但我似乎無法理解爲什麼它行爲如此奇怪。也許我錯過了一些解決我的問題的方法之一。我希望有一種方法可以返回BOOL
積分在SKTexture
內,但當然沒有。這就是爲什麼使用物理機構應該是關鍵 - 因爲它代表了確切的圖像尺寸和點。任何建議將不勝感激。謝謝!
也許嘗試物理身體youre設法檢測中創建一個1px的物理身體。然後嘗試將它向每個方向移動一個像素,並查看是否檢測到任何碰撞。 – hamobi
我可以嘗試,我猜 - 這可能工作。我想通過這個問題是什麼,如果你可以請看看這裏http://stackoverflow.com/questions/35705597/prevent-location-offset-with-spritekit-camera-node –
很難讓我跟隨正在發生的事情。我已經完成了gameplaykit尋路,但只有當它是一個網格地圖。沒有用物理對象完成它。對不起 – hamobi