gpt4 book ai didi

ios - 检测两个节点上的屏幕位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:27 26 4
gpt4 key购买 nike

我目前正在制作一个 Flappy Bird 副本。放松,这只是为了我和学习部分,我不会发布它,所以不要讨厌。

这只鸟被锁定在:

self.size.width/3

管道是这样生成的:

- (void)generatePipes {
for (NSInteger i = 0; i < 3; i++) {
pipeNode = [SKNode node];

[pipeNode setName:@"pipe"];
[pipeNode setPosition:CGPointMake(self.size.width + 100.0 + (200.0 * i), 0.0)];

[self addChild:pipeNode];

**BLABLABLA. Some code**

[pipeTop setPosition:CGPointMake(0.0, arc4random_uniform(250) + 460.0)];
[pipeBottom setPosition:CGPointMake(0.0, pipeTop.position.y - (550.0 + arc4random_uniform(10)))];

[pipeTop setPhysicsBody:[SKPhysicsBody bodyWithRectangleOfSize:pipeTop.size]];
[pipeBottom setPhysicsBody:[SKPhysicsBody bodyWithRectangleOfSize:pipeBottom.size]];

[pipeTop.physicsBody setDynamic:NO];
[pipeBottom.physicsBody setDynamic:NO];

pipeTop.physicsBody.categoryBitMask = blockBitMask;
pipeBottom.physicsBody.categoryBitMask = blockBitMask;
pipeNode.physicsBody.categoryBitMask = blockBitMask;

[pipeNode addChild:pipeTop];
//[pipeTop attachDebugRectWithSize:pipeTop.size];
//[pipeBottom attachDebugRectWithSize:pipeBottom.size];
[pipeNode addChild:pipeBottom];
}
}

这是我唯一做的事情,是的,我是游戏开发的新手。 FirstDistance 是第一个管道到达之前的距离:

        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]];
[self runAction:[SKAction playSoundFileNamed:@"pipe.mp3" waitForCompletion:NO]];
}
}

我如何告诉更新方法管道通过鸟的效率最高?计算管道之间的像素并重置它?或者有什么方法可以检测它们何时通过?

最佳答案

如果您知道鸟的水平位置,您可以使用一些“简单”的数学来计算管道到达意味着它已经超过鸟的位置需要多长时间。一些伪代码:

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;

然后你可以创建一个 SKActionSequence,在管道开始移动的同时触发它:

SKAction *wait = [SKAction waitForDuration: timeThePipeReachesTheBird];
SKAction *addToScore = [SKAction performSelector:@selector(addToScore) onTarget:self]; // performing the addToScore method
SKAction *sequence = [SKAction sequence:@[wait, addToScore]];

另一种实现您正在寻找的方法是让一个无敌的 Sprite 跟在 birdSprite 后面。每当这个“scoreSprite”与管道碰撞时,您就知道管道已经超过了鸟...

关于ios - 检测两个节点上的屏幕位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21830500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com