首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpriteKit在持续时间为空的位置添加节点

SpriteKit在持续时间为空的位置添加节点
EN

Stack Overflow用户
提问于 2014-10-04 21:30:57
回答 1查看 120关注 0票数 0

我需要些帮助。我正在开发一个游戏,我有两个问题。游戏的快速解释:

有三个不同的节点(鲨鱼(玩家)、水球和砖块)。

当游戏开始时,有一个鲨鱼,四个水球和八个砖块。

当鲨鱼接触水球时,玩家获得积分,水球消失,游戏在随机位置添加另一个水球,

当鲨鱼与砖头鲨鱼接触死亡并从屏幕上消失时。

我的问题是;

首先,当我们击中水球时,我们如何在空位置添加水球。我如何确保新的水球将在不同的位置,然后砖块和其他水球?

第二:

我想等几秒钟再加入新的水球。我该怎么做?

这是我代码的一部分。

谢谢,

代码语言:javascript
复制
    -(void) addWaterBallTopLeft {

 WaterBall *waterBall = [WaterBall waterBallAtPosition:CGPointMake
                    ([Util randomWithMin:(self.frame.size.width/10) + self.waterBall.size.width max:self.frame.size.width/2-self.brickT.size.width],
                    [Util randomWithMin:(self.frame.size.height- (self.frame.size.height/4)) + self.brickW.size.height max:self.frame.size.height-20])];

                    waterBall.name = @"WATERBALLTL";
                    [self addChild:waterBall ];
   }

     -(void) addWaterBallTopRight {

WaterBall *waterBall = [WaterBall waterBallAtPosition:CGPointMake([Util randomWithMin:self.frame.size.width/2+20 max:self.frame.size.width-20], [Util randomWithMin:(self.frame.size.height- (self.frame.size.height/4)-20) max:self.frame.size.height-20])];
waterBall.name = @"WATERBALLTR";


[self addChild:waterBall ];
   }

  -(void) addWaterBallBottomLeft {

WaterBall *waterBall = [WaterBall waterBallAtPosition:CGPointMake([Util randomWithMin:20 max:self.frame.size.width/2-20], [Util randomWithMin:(self.frame.size.height/2)+20 max:(self.frame.size.height- (self.frame.size.height/4)-20)])];

waterBall.name = @"WATERBALLBL";

[self addChild:waterBall];
   }

  -(void) addWaterBallBottomRight {

WaterBall *waterBall = [WaterBall waterBallAtPosition:CGPointMake([Util randomWithMin:self.frame.size.width/2+20 max:self.frame.size.width-20], [Util randomWithMin:(self.frame.size.height/2)+20 max:(self.frame.size.height- (self.frame.size.height/4)-20)])];

waterBall.name = @"WATERBALLBR";

[self addChild:waterBall];
    }




   -(void) addBrick {
   BrickW *brickW1 = [BrickW BrickWAtPosition:CGPointMake( (self.frame.size.width/12)* 1 , self.frame.size.height - self.frame.size.height * 0.25) ];
   [self addChild:brickW1];

   BrickW *brickW2 = [BrickW BrickWAtPosition:CGPointMake( (self.frame.size.width/12)* 3 , self.frame.size.height - self.frame.size.height * 0.25) ];
   [self addChild:brickW2];

   BrickW *brickW3 = [BrickW BrickWAtPosition:CGPointMake( (self.frame.size.width/12)* 9, self.frame.size.height - self.frame.size.height * 0.25)];

  [self addChild:brickW3];

BrickW *brickW4 = [BrickW BrickWAtPosition:CGPointMake( (self.frame.size.width/12)* 11, self.frame.size.height - self.frame.size.height * 0.25)];

[self addChild:brickW4];


 BrickT *brickT1 = [BrickT BrickTAtPosition:CGPointMake( self.frame.size.width/2 , (self.frame.size.height / 24)*23 )];
 [self addChild:brickT1];

BrickT *brickT2 = [BrickT BrickTAtPosition:CGPointMake( self.frame.size.width/2 , (self.frame.size.height / 24)*21 )  ];
[self addChild:brickT2];

   BrickT *brickT3 = [BrickT BrickTAtPosition:CGPointMake( self.frame.size.width/2 , (self.frame.size.height / 24)*13 )];
    [self addChild:brickT3];

BrickT *brickT4 = [BrickT BrickTAtPosition:CGPointMake( self.frame.size.width/2 , (self.frame.size.height / 24)*15)];
[self addChild:brickT4];


    }

代码语言:javascript
复制
    - (void) didBeginContact:(SKPhysicsContact *)contact {
SKPhysicsBody *firstBody, *secondBody;

if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) {
    firstBody = contact.bodyA;
    secondBody = contact.bodyB;
} else {
    firstBody = contact.bodyB;
    secondBody = contact.bodyA;
}


if ( firstBody.categoryBitMask == CollisionCategoryBrick && secondBody.categoryBitMask == CollisionCategoryShark ) {
    NSLog(@"BRICK");

  [contact.bodyB.node removeFromParent];

} else if ( firstBody.categoryBitMask == CollisionCategoryWaterBall && secondBody.categoryBitMask == CollisionCategoryShark ) {
    NSLog(@"BALL");
    self.addSeconds =YES;

    [contact.bodyA.node removeFromParent];


    [self addPoints:PointsPerHit];



    if (![ self childNodeWithName:@"WATERBALLTL"]) {

        [self addWaterBallTopLeft];
    }
    if (![ self childNodeWithName:@"WATERBALLTR"]) {
        [self addWaterBallTopRight];
    }
    if (![ self childNodeWithName:@"WATERBALLBL"]) {
        [self addWaterBallBottomLeft];
    }
    if (![ self childNodeWithName:@"WATERBALLBR"]) {
        [self addWaterBallBottomRight];
    }     }
  NSLog(@"%lu", (unsigned long)[self.children count]);

     }

代码语言:javascript
复制
     -(void)update:(CFTimeInterval)currentTime {

    if (startGamePlay){

        startTime = currentTime;
        startGamePlay = NO;

}

timeSinceStart = (currentTime -startTime);
countDownInt = 1000 - (int)(currentTime-startTime);




 if (countDownInt > 0 && self.addSeconds == NO) {

     countDown.text = [NSString stringWithFormat:@"%i", countDownInt];

 }   else if(countDownInt > 0 && self.addSeconds == YES){


     startTime +=2;

    countDown.text = [NSString stringWithFormat:@"%i", countDownInt];
     self.addSeconds = NO;
}

if (countDownInt == 0 ){

    countDown.text =@"0";
    Level2 *level2  = [Level2 sceneWithSize:self.frame.size];
    SKTransition *transition = [SKTransition fadeWithDuration:0.5];
    [self.view presentScene:level2  transition:transition];

}

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-05 06:40:43

//回答您的第二个问题,使用一个skaction序列,在1秒后触发一个函数

代码语言:javascript
复制
  SKAction *Timetofire= [SKAction sequence:@[
                                            //time after you want to fire a function
                                            [SKAction waitForDuration:1],
                                            [SKAction performSelector:@selector(urFunction)
                                                             onTarget:self]

                                            ]];
    [self runAction:Timetofire withKey:@"key"];

   //if you want your function eld fire x number of time 
   [self runAction:[SKAction repeatAction:Timetofire  count:10]];
   where x in number of times you wan't your function to fire

  //if you want your function fire forever
 [self runAction:[SKAction repeatActionForever:Timetofire ]];

1)现在,您的第一个问题的答案使用预定义的NSMutableArray存储多个CGPoint。在每个CGPoint定义鲨鱼、球和其他物品的位置时,请确保每个CGPoint的值是不同的,这将给您的项目带来一个随机事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26197391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档