菜鸟教程小白 发表于 2022-12-13 11:04:14

ios - 玩家下落时 Spritekit 与平台发生碰撞


                                            <p><p>我正在 spritekitobjective-c的帮助下制作一个 spritekit 平台游戏。为此我使用了 spritekit 的物理引擎,除了我还没有找到一种方法来实现玩家与平台的 plaformer 风格碰撞之外,一切都很顺利。</p>

<p>我想要的是我的玩家应该在下落时与平台发生碰撞,而不是在跳跃时。如下图所示。此处玩家正在跳跃,因此他不能与平台发生碰撞
<a href="/image/BPCBG.png" rel="noreferrer noopener nofollow"><img src="/image/BPCBG.png" alt=""/></a> </p>

<p>在这张图片中,玩家正在摔倒,所以他必须站在平台上。
<a href="/image/rDIIs.png" rel="noreferrer noopener nofollow"><img src="/image/rDIIs.png" alt="enter image description here"/></a> </p>

<p>我尝试在 didBeginContact 方法中消除平台与玩家的冲突,但这并没有帮助,因为我的平台不是动态类型。添加和移除碰撞对玩家有效,但对平台无效。</p>

<p>任何帮助将不胜感激。</p>

<p><strong>编辑:</strong>这里是一个例子,如果我在接触两个相邻平台时更改玩家的碰撞位掩码会发生什么。</p>

<p> <a href="/image/olUuy.png" rel="noreferrer noopener nofollow"><img src="/image/olUuy.png" alt=""/></a> </p>

<p>玩家一旦与另一个平台发生 react 就会跌倒。</p>

<p><strong>编辑:</strong> aramusss 的第二个解决方案很好,但它确实给我带来了另一个问题。由于我的游戏中有敌人站在平台上,如果我移除平台的物理主体,敌人就会倒在上面。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以将平台保存在数组中,然后检查玩家 Y 位置。如果 <code>player.position.y - (player.size.height/2)</code> <<code>platform.position.y - (platform.size.height/2)</code> 你停用碰撞这个平台(意味着 <code>player</code> 在平台下方,我们不希望它发生碰撞)。你应该使用:</p>

<pre><code>// You should set collision bit mask to avoid collisioning between player and platforms, but not between other objects:
player.physicsBody.collisionBitMask = 1;
player.physicsBody.categoryBitMask = playerCategory; // An int constant, for example 101
player.physicsBody.contactTestBitMask = platformCategory; //Another constant, for example 102

platform.physicsBody.collisionBitMask = 1;
platform.physicsBody.categoryBitMask = platformCategory;
platform.physicsBody.contactTestBitMask = playerCategory;
</code></pre>

<p>像这样设置值将使两个物体不会发生碰撞,而更改它们会使它们再次发生碰撞。 </p>

<p><strong>编辑</strong></p>

<p>另一种解决方案是使用 <code>NSTimer</code> 每 0.5 秒调用一个方法(例如),该方法将检查播放器附近是否有平台。如果有并且它在播放器后面,它将创建一个与平台大小相同的 <code>physicsBody</code>。如果创建了一个不再靠近玩家的 body ,或者玩家在该平台下方,该功能将删除它。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 玩家下落时 Spritekit 与平台发生碰撞,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32776304/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32776304/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 玩家下落时 Spritekit 与平台发生碰撞