ios - 检测两个节点上的屏幕位置
<p><p>我目前正在制作 <strong>Flappy Bird</strong> 副本。放轻松,它只是为了我和学习部分,我不会发布它,所以不要讨厌。</p>
<p>鸟被锁定在:</p>
<pre><code>self.size.width/3
</code></pre>
<p>管道是这样生成的:</p>
<pre><code>- (void)generatePipes {
for (NSInteger i = 0; i < 3; i++) {
pipeNode = ;
;
;
;
**BLABLABLA. Some code**
;
;
];
];
;
;
pipeTop.physicsBody.categoryBitMask = blockBitMask;
pipeBottom.physicsBody.categoryBitMask = blockBitMask;
pipeNode.physicsBody.categoryBitMask = blockBitMask;
;
//;
//;
;
}
}
</code></pre>
<p>这是我唯一做的一些工作,是的,我是游戏开发的新手。 FirstDistance 是第一个管道到达之前的距离:</p>
<pre><code> firstDistance += -moveAmount.x;
if(touchBegan > 0 && firstDistance > (self.size.width -(self.size.width/3)- 60)){
distanceSinceLastPipe += -moveAmount.x;
if (distanceSinceLastPipe >= 140.0) {
distanceSinceLastPipe = 0.0;
score += 1;
[_scoreLabel setText:[NSNumberFormatter localizedStringFromNumber:@(score)
numberStyle:NSNumberFormatterDecimalStyle]];
];
}
}
</code></pre>
<p>我如何告诉更新方法管道通过鸟最有效?计算管道之间的像素并重置它?或者有什么方法可以检测它们何时通过?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>如果您知道鸟的水平位置,您可以使用一些“简单”的数学来计算管道需要多长时间才能到达意味着它已经通过鸟的位置。一些伪代码:</p>
<pre><code>CGFloat totalDistanceForPipeToMove = pipe.position.x - endPosition.x; // endPosition == the final destination for the pipe.
CGFloat relativeSpeed = totalDistanceForPipeToMove / duration; // duration being the SKAction's duration
CGFloat distanceToBird = pipe.position.x - birdPosition.x;
CGFloat timeThePipeReachesTheBird = distanceToBird / relativeSpeed;
</code></pre>
<p>然后你可以创建一个 SKActionSequence,在管道开始移动的同时触发它:</p>
<pre><code>SKAction *wait = ;
SKAction *addToScore = ; // performing the addToScore method
SKAction *sequence = ];
</code></pre>
<hr/>
<p>实现您正在寻找的另一种方法是让一个无敌 Sprite 尾随birdSprite。每当这个“scoreSprite”与管道碰撞时,你就知道管道已经通过了鸟……</p></p>
<p style="font-size: 20px;">关于ios - 检测两个节点上的屏幕位置,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/21830500/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/21830500/
</a>
</p>
页:
[1]