Ios 避免精灵套件节点相互堆叠
我是一个初学者开发人员,我正在制作一个两个彩色球落下的游戏。你必须买蓝色的,避开红色的。现在,球出现在屏幕顶部的一个随机点上,但有时一些球出现在另一个球的顶部,我想知道是否有办法在代码中检测并避免它,因为我不知道如何实现它。谢谢如果您需要有关某些内容的更多信息,请随时向我询问。您可以创建一个静态全局变量,该变量保存上次添加的球的上一个x位置,并检查新创建的球是否与上次创建的球具有相同的值,然后您可以重新随机选择球的位置并再次检查。 例如:Ios 避免精灵套件节点相互堆叠,ios,iphone,sprite-kit,Ios,Iphone,Sprite Kit,我是一个初学者开发人员,我正在制作一个两个彩色球落下的游戏。你必须买蓝色的,避开红色的。现在,球出现在屏幕顶部的一个随机点上,但有时一些球出现在另一个球的顶部,我想知道是否有办法在代码中检测并避免它,因为我不知道如何实现它。谢谢如果您需要有关某些内容的更多信息,请随时向我询问。您可以创建一个静态全局变量,该变量保存上次添加的球的上一个x位置,并检查新创建的球是否与上次创建的球具有相同的值,然后您可以重新随机选择球的位置并再次检查。 例如: 最好只为球设置一个SKNode,当添加新球时,只需通过该
最好只为球设置一个SKNode,当添加新球时,只需通过该节点检查球的位置
//balls node variable in scene, SKNode *ballsNode,
//add this to init or other method:
//self.ballsNode = [SKNode node];
//[self addChild:self.ballsNode];
//
-(void)addRock
{
SKSpriteNode *rock = [[SKSpriteNode alloc] initWithColor:[SKColor brownColor] size:CGSizeMake(8, 8)];
CGFloat newRandomX;
CGPoint ballPosition;
BOOL positionIsOk = NO;
while(!positionIsOk)
{
newRandomX = getRandomX();
ballPosition = CGPointMake(newRandomX, yourYPos);
for(SKSpriteNode *node in self.ballsNode.children)
{
if(!CGRectContainsPoint ( node.frame, ballPosition ))
{
positionIsOk = YES;
break;
}
else
{
newRandomX = getRandomX();
ballPosition = CGPointMake(newRandomX, yourYPos);
}
}
}
rock.position = ballPosition;
[self.ballsNode addChild:rock];
}
通过这种方式,您将穿过所有球并获得位置,这样它就不会与所有球碰撞。如何创建球?在for循环中还是在action中?球是通过创建节点(球)的方法创建的。。。该方法首先在游戏开始时调用,并不断创建球。此代码可以编写得更好,但它可以完成您需要的工作;)
//balls node variable in scene, SKNode *ballsNode,
//add this to init or other method:
//self.ballsNode = [SKNode node];
//[self addChild:self.ballsNode];
//
-(void)addRock
{
SKSpriteNode *rock = [[SKSpriteNode alloc] initWithColor:[SKColor brownColor] size:CGSizeMake(8, 8)];
CGFloat newRandomX;
CGPoint ballPosition;
BOOL positionIsOk = NO;
while(!positionIsOk)
{
newRandomX = getRandomX();
ballPosition = CGPointMake(newRandomX, yourYPos);
for(SKSpriteNode *node in self.ballsNode.children)
{
if(!CGRectContainsPoint ( node.frame, ballPosition ))
{
positionIsOk = YES;
break;
}
else
{
newRandomX = getRandomX();
ballPosition = CGPointMake(newRandomX, yourYPos);
}
}
}
rock.position = ballPosition;
[self.ballsNode addChild:rock];
}