首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sprite工具包:删除特定节点,而不是所有节点

Sprite工具包:删除特定节点,而不是所有节点
EN

Stack Overflow用户
提问于 2014-02-19 18:53:38
回答 3查看 4.8K关注 0票数 3

我已经创建了一个应用程序,它有两种不同大小的持续不断的“石头”节点从天而降。玩家控制第三块石头对象,并根据收集到的两种落石类型中的哪一种获得点数。最后,梁对象起到移动地面的作用。到目前为止,我已经在我的应用程序中添加了碰撞检测,它可以检测不同石头和光束之间的碰撞。这是我的碰撞代码:

代码语言:javascript
复制
static const uint32_t stoneCategory = 1;
static const uint32_t beamCategory = 2;
static const uint32_t stoneCategory2 = 4;

代码语言:javascript
复制
-(void)didBeginContact:(SKPhysicsContact *)contact{

SKPhysicsBody *firstBody;
SKPhysicsBody *secondBody;

CGPoint contactPoint = contact.contactPoint;

float contact_x = contactPoint.x;
float contact_y = contactPoint.y;

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

else
{
    firstBody = contact.bodyB;
    secondBody = contact.bodyA;
}


// First condition: make big stone stick to moving beams 
if ((firstBody.categoryBitMask & stoneCategory) != 0)
{
    SKPhysicsJointFixed *joint =
    [SKPhysicsJointFixed jointWithBodyA:contact.bodyA
                                  bodyB:contact.bodyB
                                 anchor:CGPointMake(contact_x, contact_y)];

    [self.physicsWorld addJoint:joint];
}


// Second condition: remove small stone on collision with big stone

if ((firstBody.categoryBitMask & stoneCategory) != 0 &&
    (secondBody.categoryBitMask & stoneCategory2) != 0)
{

      NSLog(@"Hit");

      [self enumerateChildNodesWithName:@"stone" usingBlock:^(SKNode *node, BOOL *stop) {
      [node removeFromParent];
  }];
}

这就像预期的那样完美工作。当大石头击中光束物体时,它会粘附在物体上,并随着物体移动。此外,当大石头和小石头碰撞时,小石头将从场景中移除。然而:虽然我知道这正是我的代码应该做的,因为它指向我的stone方法(称为' stone '),但在石头之间的碰撞中,我只希望移除一个特定的小石头,而不是场景中所有可见的小石头。

我想不出该怎么做。重述一下:如何删除一个特定的节点,而不是删除它的整个方法?希望我的问题很清楚,如果需要的话,我很乐意提供更多的细节。

我的stone方法:

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

 SKSpriteNode *stone = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(12, 12)];

stone.position = CGPointMake(skRand(0, self.size.width), self.size.height+12);
stone.name = @"stone";
stone.physicsBody.categoryBitMask = stoneCategory2;
stone.physicsBody.contactTestBitMask = stoneCategory;

stone.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:stone.size];
stone.physicsBody.usesPreciseCollisionDetection = YES;

[self addChild:stone];
}

在我的createSceneContents中

代码语言:javascript
复制
SKAction *makeStone= [SKAction sequence:@[
                                        [SKAction performSelector:@selector(addStone) onTarget:self],
                                        [SKAction waitForDuration:0.30 withRange:0.25]
                                        ]];

 [self runAction:[SKAction repeatActionForever:makeStone]];

以上是我的小石法。对于较大的方法,我使用了一个可比较的方法,但使用了其他名称。

EN

回答 3

Stack Overflow用户

发布于 2014-04-04 15:49:27

其背后的原因1)精灵绘制新的对象在z的顺序和碰撞也会发生的顺序你的绘图然后

代码语言:javascript
复制
so when you remove a small stone at first time and recreate it changes its body from A to B

只需在下面的联系人代码上检查特定的正文类型

代码语言:javascript
复制
 if(([contact.bodyA.node.name isEqualToString:@"bigstone"] && [contact.bodyB.node.name isEqualToString:@"smallstone"] ) || ([contact.bodyA.node.name isEqualToString:@"smallstone"] && [contact.bodyB.node.name isEqualToString:@"bigstone"]) )
        {


            if([contact.bodyA.node.name isEqualToString:@"smallstone"] )
            {
                [contact.bodyA.node removeFromParent];
            }else{
                [contact.bodyB.node removeFromParent];
            }

    }
票数 4
EN

Stack Overflow用户

发布于 2014-09-25 12:17:27

试一下这一行代码

代码语言:javascript
复制
[self enumerateChildNodesWithName:@"stone" usingBlock:^(SKNode *node, BOOL *stop) {
            [node removeFromParent];
        }];
票数 1
EN

Stack Overflow用户

发布于 2014-02-19 18:58:01

代码语言:javascript
复制
if ((firstBody.categoryBitMask & stoneCategory) != 0 &&
    (secondBody.categoryBitMask & stoneCategory2) != 0)
{
      NSLog(@"Hit");
      [secondBody.node removeFromParent];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21878347

复制
相关文章

相似问题

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