首先,我要感謝本網站上的每位用戶,因爲我總是在這裏找到解決方案,它非常有幫助!iOS - bodyWithPolygonFromPath:Body與路徑相同,但碰撞無法正常工作
我正在嘗試使用SpriteKit製作像Xonix,Bix或Jezzball一樣的遊戲。無論如何,我有一個球彈跳在牆上,我試圖阻止它不能去的地方,這些障礙是由CGPathref(用戶使其運動產生的)製成的。創建skspritenode的物理體,它正在工作,但並非總是如此。我已經下載了YMCPhysicsDebugger來查看身體的內容,並且在任何情況下都很好,但是我已經看到,當我在CGPath上有超過4分時,球不會與整個身體發生碰撞,它只碰撞一個較小的區域..我試過並搜索了很多沒有任何結果..我試圖使逆時針CGPath的點,它不工作,即使在另一側..
我複製你創建SKSpriteNode的代碼,但我懷疑這將是有用的,我認爲這個問題是我的觀點,也許我需要在physicsbody用多邊形
SKSpriteNode *zone = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(50, 50)];
zone.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path.CGPath]; // 1
zone.physicsBody.friction = 0.0f;
zone.physicsBody.restitution = 0.0f;
zone.physicsBody.linearDamping = 0.0f;
zone.physicsBody.allowsRotation = NO;
zone.physicsBody.categoryBitMask = wallsCategory;
zone.physicsBody.dynamic = NO; // 2
[self addChild:zone];
如何工作的詳細解釋
這裏是我的「遊戲」的兩張照片,t他第一個工作,球就反彈回來。第二個不像它應該那樣工作,只有上部被檢測到碰撞。
我也試着當球在更新功能進入障礙手動使反彈反對它來檢測,但當然,這不是真正的工作。再加上我的數學研究是不是很好笑
for(SKSpriteNode *zone in zonesTab)
{
UIBezierPath *path = [zoneesTab objectAtIndex:i]; // Array of UIBezierPath for the obstacles
if(CGPathContainsPoint(path.CGPath, NULL, ball.frame.origin, FALSE))
{
ball.physicsBody.velocity=CGVectorMake(ball.physicsBody.velocity.dx*-1, ball.physicsBody.velocity.dy*-1);
NSLog(@"Touches iT");
}
i++;
}
我也想過做一些SKSpriteNode每次一個CGPath已經4點多了,但我真的不知道該怎麼辦,在數學..
無論如何,這是一篇很長的文章,我希望你們中的一些人能夠閱讀並理解這一切(抱歉我的英文,我是法國人!),最重要的是,能夠幫助我!
非常感謝您
哦,我的上帝!非常感謝 !!!爲什麼我以前沒有嘗試過這麼多小時......但我通常在這樣簡單的事情上遇到麻煩..無論如何,非常感謝你:) PS:我的英語不好,因爲我認爲凹表示「有一個洞裏面」,它誤導我之前! – user3198930
也混合了許多凹凸。 ;)要記住的一種方法是,在末尾有一個「x」,其兩條線標記形成矩形的四個角,而矩形爲凸形。 – LearnCocos2D
有關「洞穴進入」的凹陷嗎? – fuzzygoat