我是一名初学者开发人员,我正在制作一款游戏,其中有两个彩球落下。你必须得到蓝色的,避免红色的。现在,球出现在屏幕顶部的一个随机点上,但有时候一些球会出现在其他球的顶部,我想知道是否有办法检测并在代码中避免它,因为我不知道如何实现它。谢谢!如果您需要更多信息,请随时向我提问。避免Sprite Kit节点彼此堆叠
0
A
回答
0
您可以创建一个静态全局变量,它保存最后一个添加的球的前一个x位置,并检查新创建的球是否与最后一个球具有相同的值,然后您可以重新放置球的位置并检查再次。 例子:
// here is the global variable declaration
static float _lastRandomX = 0;
//this method creates a rock (you can call it addBall)
- (void)addRock
{
SKSpriteNode *rock = [[SKSpriteNode alloc] initWithColor:[SKColor brownColor] size:CGSizeMake(8, 8)];
rock.name = @"rock";
// the work goes here
CGFloat newRandomX = 0;
while(_lastRandomBall == newRandomX) {
newRandomX = getRandomX();
}
rock.position = CGPointMake(newRandomX, yourYPos);
_lastRandomX = newRandomX
[self addChild:rock];
}
// now here is the action calling this method
- (void)runAction {
SKAction *makeRocks = [SKAction sequence:@[
[SKAction performSelector:@selector(addRock) onTarget:self],
[SKAction waitForDuration:0.10 withRange:0.15]]];
[self runAction:[SKAction repeatActionForever:makeRocks]];
.....
}
1
这可能是最好有一个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];
}
这样你就可以穿过所有的球并获得位置,所以它不会与所有球碰撞。
+0
这段代码可以写的更好,但它会做你需要的工作;) – BSevo
相关问题
- 1. 堆叠在彼此
- 2. 水平堆叠轴彼此
- 3. 在tkinter中彼此不堆叠的帧
- 4. Sprite Kit中的弹跳节点
- 5. Sprite kit节点在接触时口吃
- 6. Cytoscape:避免重叠分组节点
- 7. 堆叠div彼此相邻/水平
- 8. 将两个div彼此堆叠
- 9. 在彼此之间堆叠图像
- 10. 问题与divs彼此堆叠
- 11. 表td/UI李堆叠在彼此
- 12. 如何在彼此之上堆叠Div
- 13. 图像堆叠到彼此onLayout Android
- 14. CSS Image成为彼此堆叠
- 15. 画布上的图像彼此堆叠
- 16. 表单块不会彼此堆叠
- 17. 幻灯片堆叠在彼此
- 18. 2D塔防 - 彼此堆叠的单位
- 19. 堆叠在彼此上的图像
- 20. 堆栈ImageButtons彼此
- 21. Sprite Kit - 使用Switch Case向场景添加随机Sprite节点
- 22. 防止TextBlocks彼此重叠
- 23. 重叠DIV彼此
- 24. CCSprite彼此重叠
- 25. 如何避免定时器堆叠
- 26. 避免图像在手机上堆叠
- 27. 如何避免堆叠jquery post()
- 28. achartengine堆叠条形图的X和Y图彼此重叠?
- 29. 在Sprite-Kit中将点转换为节点
- 30. 我如何在彼此旁边堆叠div并在彼此之上?
你如何创造球?在for循环还是在行动? –
通过创建节点(球)的方法创建球......该方法在游戏开始时首先被调用,并不断创建球。 –