• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:56:12 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我目前正在制作 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]];
        }
    }

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



Best Answer-推荐答案


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

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 performSelectorselector(addToScore) onTarget:self]; // performing the addToScore method
SKAction *sequence = [SKAction sequence[wait, addToScore]];

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap