菜鸟教程小白 发表于 2022-12-12 18:47:41

ios - 相邻的 SKPhysicsBody 无法正常工作


                                            <p><p>我在尝试将两个具有物理实体的 block 彼此叠放时遇到问题。</p>

<p> <a href="http://s1173.photobucket.com/user/Kyle_Decot/media/example_zps02f027fe.mp4.html" rel="noreferrer noopener nofollow">http://s1173.photobucket.com/user/Kyle_Decot/media/example_zps02f027fe.mp4.html</a> </p>

<p>正如您在视频中看到的那样,我可以将我的积木放在堆叠的积木上,即使它们是相互叠放的。</p>

<p>玩家方 block 和其他方 block 都继承自一个基本的 <code>Block</code> 类,看起来像这样</p>

<pre><code>#import &#34;Block.h&#34;

@implementation Block

+ (void)loadSharedAssets {

}

- (id)initWithColor:(UIColor *)color size:(CGSize)size {

    self = ;

    if (self) {

      self.texture = ;

      self.physicsBody = ;
      self.physicsBody.usesPreciseCollisionDetection = YES;
      self.physicsBody.dynamic = NO;


    }

    return self;
}

@end
</code></pre>

<p><strong>更新</strong></p>

<p>我添加了一张图片以使问题更加清晰。本质上的问题是,即使蓝色 block 彼此正上方,我仍然能够跳起来(带红色 block )并坐在底部蓝色 block 的边缘(这应该是不可能的)。似乎有些东西与物理物体或其他东西有关。</p>

<p> <img src="/image/LWwWT.png" alt="enter image description here"/> </p>

<p>您可以看到,由于某种原因,红色 block <em>略</em>高于相邻的蓝色 block ,并且“坐在”底部蓝色 block 的边缘。当我跳起来反对它时。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><strong>编辑:用答案替换原来的建议</strong></p>

<p>滚动到<a href="http://www.box2d.org/manual.html#_Toc258082970" rel="noreferrer noopener nofollow">box2d documentation</a> 的<strong>4.5 边缘形状</strong>部分你会找到原因(SpriteKit 在其物理实现中使用 Box2D)</p>

<blockquote>
<p>In many cases a game environment is constructed by connect several edge shapes end-to-end. This can give rise to an unexpected artifact when a polygon slides along the chain of edges. In the figure below we see a box colliding with an internal vertex. These ghost collisions are caused when the polygon collides with an internal vertex generating an internal collision normal.</p>
</blockquote>

<p>这里的两条边(edge1 和 edge2)是游戏中两个蓝色框的左侧边(所以想象一下它逆时针旋转了 90 次)</p>

<p> <img src="/image/IPmdY.png" alt=""/> </p>

<p>Box2D 引入了 <em>ChainShapes</em> 来解决这个问题(您可以在 <strong>5.6 Edge Shapes</strong> 部分找到引用。</p>

<p>这个想法是在同时生成多个盒子时用这些顶点链替换成组的方形物理体。</p>

<p>我相信您可以使用 <a href="https://developer.apple.com/library/mac/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/Reference/Reference.html#//apple_ref/occ/clm/SKPhysicsBody/bodyWithEdgeChainFromRect:" rel="noreferrer noopener nofollow">bodyWithEdgeChainFromPath</a> 在 SpriteKit 中访问这些内容。并传入一个核心图形路径,该路径由要组合的框的角点组成,以形成碰撞链</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 相邻的 SKPhysicsBody 无法正常工作,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/21734959/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/21734959/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 相邻的 SKPhysicsBody 无法正常工作