菜鸟教程小白 发表于 2022-12-12 09:43:27

ios - 为无尽的运行游戏创建动态大小的 SKSpriteNode 平台


                                            <p><p>我正在为 IOS 创建我的第一个 Endless Runner 游戏,我希望它尽可能动态。我想创建一个大型“平台”图像,然后使用该图像创建各种大小的平台。</p>

<p>这个想法是随机选择一个数字作为平台的宽度,然后生成 Sprite 和主体以匹配所选尺寸。完成此操作后,仅使用图像的一部分将图像填充到 Sprite 中。</p>

<p>目前我正在使用以下内容,但这会根据 UIImage 的大小创建节点。</p>

<pre><code>SKSpriteNode *spritePlatform = [ initWithImageNamed:@&#34;Platform&#34;];

;

spritePlatform.name = @&#34;Platform&#34;;

spritePlatform.physicsBody = ;
spritePlatform.physicsBody.affectedByGravity = NO;
spritePlatform.physicsBody.dynamic = NO;

// 1
spritePlatform.physicsBody.usesPreciseCollisionDetection = YES;
// 2
spritePlatform.physicsBody.categoryBitMask = CollisionCategoryPlatform;

spritePlatform.physicsBody.contactTestBitMask = CollisionCategoryPlayer;


;
;
</code></pre>

<p>所以理想情况下我想</p>

<ol>
<li>根据随机宽度和固定高度创建 Sprite 。</li>
<li>使用较大图像的一部分来填充 Sprite 。</li>
</ol>

<p>有什么想法可以做到这一点吗?</p>

<p>谢谢</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><blockquote>
<p>Create a sprite based upon a random width and fixed height.</p>
</blockquote>

<p>为 <code>width</code> 选择一个随机数很简单。您可以使用 <a href="https://stackoverflow.com/questions/29955823/whats-the-difference-between-arc4random-and-arc4random-uniform-in-swift" rel="noreferrer noopener nofollow">arc4random_uniform</a>并确保选择合理范围内的数字(小于您的平台图像)。</p>

<blockquote>
<p>Use part of a larger image to fill in the sprite.</p>
</blockquote>

<p>这可以通过使用 <a href="https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKTexture_Ref/index.html#//apple_ref/occ/clm/SKTexture/textureWithRect:inTexture:" rel="noreferrer noopener nofollow">textureWithRect:inTexture:</a> 来完成.第一个参数是单位坐标空间中的一个矩形,它指定要使用的纹理部分。第二个参数是创建新纹理的整个平台纹理。</p>

<p>以下是有关如何设置每个平台的大小/部分的提示:</p>

<ol>
<li><p>(0, 0)是整个平台坐标的左下角。</p></li>
<li><p>x/y坐标的范围是0到1,不是平台图像的真实尺寸。</p></li>
</ol>

<p>给定由平台图像<code>platformAllTexture</code>创建的纹理和第一步中随机的<code>width</code>,平台纹理可能是:</p>

<pre><code>// Fixed height is set as half of the platform image
SKTexture *platformTexture = [SKTexture textureWithRect:CGRectMake(0, 0, width/platformAllTexture.size.width, 1/2.0)         
                                              inTexture:platformAllTexture];
</code></pre>

<p>这样,您就获得了动态尺寸平台的纹理<code>platformTexture</code>。</p>

<p>在上面的例子中,如果矩形被定义为<code>CGRectMake(0, 0, 1/3.0, 1/2.0)</code>,你会得到类似的结果:</p>

<p> <a href="/image/qforD.png" rel="noreferrer noopener nofollow"><img src="/image/qforD.png" alt="enter image description here"/></a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 为无尽的运行游戏创建动态大小的 SKSpriteNode 平台,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33593402/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33593402/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 为无尽的运行游戏创建动态大小的 SKSpriteNode 平台