菜鸟教程小白 发表于 2022-12-12 23:59:02

ios - SpriteKit - 节点稍微调整位置


                                            <p><p>我有许多单独的节点(图 block )构成我的游戏背景。它们都是 32x32p,并且彼此相邻放置以形成地板/屋顶/障碍物。我从 JSON 文件加载 map ,并在场景初始化时根据 JSON 文件的内容将节点放置在背景层/节点上。 </p>

<p>这工作正常,但是,我在移动背景层/物理引擎正在做它的事情时遇到了一些错误。一些节点彼此移动 1 个点/像素,从而在它们之间产生间隙。而且由于背景是不同的颜色,这看起来很糟糕。</p>

<p>问题主要发生在 map 更远的地方(不是马上),同时我正在向玩家施加脉冲或物理引擎正在弹跳玩家(或类似的)。 </p>

<p>这是说明我的问题的图片:</p>

<p> <img src="/image/dsXMn.jpg" alt="Illustrative image. Click to open in new tab"/>
<a href="https://i.imgur.com/l0Lz4sd.jpg" rel="noreferrer noopener nofollow">(Click to open in separate tab)</a> </p>

<p>如您所见,在 <em>节点</em> 中的 <strong>o</strong> 和 <strong>d</strong> 之间,有一个间隙(在全尺寸中更容易看到)链接中的图像)。在玩游戏的过程中会时不时地出现很多这样的间隙,而且它们只会出现一两秒。有时它们会在玩家停止移动时停留。 </p>

<p>我通过增加/减少其 <code>x-value</code> 来移动 <code>didSimulatePhysics</code> 中的播放器。然后最后在 <code>didSimulatePhysics</code> 我调用这个方法将 <code>worldNode</code> 放在播放器的中心:</p>

<pre><code>- (void)centerViewOn:(CGPoint)centerOn {
CGFloat x = Clamp(centerOn.x, self.size.width / 2, _bgLayer.layerSize.width - self.size.width / 2);

_worldNode.position = CGPointMake(-x, _worldNode.position.y);
}
</code></pre>

<p><code>worldNode</code> 包含 <code>bgLayer</code>(包含所有单独的背景节点)和播放器本身。 </p>

<p>解决此问题的最佳方法是什么?一个可行的解决方案是让每个图 block 都为 33x32p,因此它们是重叠的。在这种情况下,您将不会看到不时出现的差距。但我认为“杀死”问题而不是隐藏它会更好。
有人有这样布置 map 的经验吗?或者以前有没有人遇到过同样的问题?如果是这样,您是如何解决的?</p>

<p>提前致谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这是基于@LearnCocos2D 评论的转换为 Int 解决方案:</p>

<pre><code>- (void)centerViewOn:(CGPoint)centerOn {
CGFloat x = Clamp(centerOn.x, self.size.width / 2, _bgLayer.layerSize.width - self.size.width / 2);

_worldNode.position = CGPointMake(Int(-x), Int(_worldNode.position.y));
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - SpriteKit - 节点稍微调整位置,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/24921017/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/24921017/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - SpriteKit - 节点稍微调整位置