Ios 如何从SKNode中删除子SKSpritenode?

Ios 如何从SKNode中删除子SKSpritenode?,ios,sprite-kit,sknode,Ios,Sprite Kit,Sknode,我将解释我的代码的一部分。我有在屏幕上向下移动的Spritenodes(图像) SKTexture* Squaretexture = [SKTexture textureWithImageNamed:@"squaregreen"]; SquareTexture.filteringMode = SKTextureFilteringNearest; Square = [SKSpriteNode spriteNodeWithTexture:SquareTexture]; Square.name = @

我将解释我的代码的一部分。我有在屏幕上向下移动的Spritenodes(图像)

SKTexture* Squaretexture = [SKTexture textureWithImageNamed:@"squaregreen"];
SquareTexture.filteringMode = SKTextureFilteringNearest;
Square = [SKSpriteNode spriteNodeWithTexture:SquareTexture];
Square.name = @"square";
.
.
.

[_objects addChild:Square];
\u objects
是一个
SKNode
Square
是一个
SKSpriteNode
。现在是我的代码:每一秒钟就有一个方块,它来自“屏幕上方”,并移动到底部。(屏幕上还有多个正方形)

现在我想要这样:当我触摸一个正方形时,它应该被“删除”或隐藏,但只有我触摸的那个。用我的代码,当我触摸所有方块时,所有方块都被删除或什么都没有。我尝试了removefromparent和removechild,但我无法解决它

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    /* Called when a touch begins */

    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode: self];
    SKNode *node = [self nodeAtPoint:location];

    NSLog(@"Point in myView: (%f,%f)", location.x, location.y);
    if ([node.name isEqualToString:@"Square"]) {
        [Square removeFromParent];
        [Square removeAllChildren];
    }    
}
你有什么建议我怎么做? 谢谢你的回答。
迈赫迈特

你几乎做对了。诀窍在于,您需要为创建的每个对象(精灵)都有一个唯一的标识符,然后将这些对象存储在数组中供以后使用

下面的代码创建了5个精灵,并为它们指定了唯一的名称:精灵-1、精灵-2等

无论何时注册触摸,它都会提取被触摸节点的名称,在阵列中搜索匹配对象,从视图中删除对象,最后从阵列中删除对象

请注意,我的示例代码基于横向视图

#import "MyScene.h"

@implementation MyScene
{
    NSMutableArray *spriteArray;
    int nextObjectID;
}

-(id)initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size])
    {
        spriteArray = [[NSMutableArray alloc] init];
        nextObjectID = 0;

        // create 5 sprites
        for (int i=0; i<5; i++)
        {
             SKSpriteNode *mySprite = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(30, 30)];
             nextObjectID ++; // increase counter by 1
             mySprite.name = [NSString stringWithFormat:@"Sprite-%i",nextObjectID]; // add unique name to new sprite
             mySprite.position = CGPointMake(50+(i*70), 200);
            [spriteArray addObject:mySprite];
            [self addChild:mySprite];
        }
    }
    return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     UITouch *touch = [touches anyObject];
     CGPoint location = [touch locationInNode: self];
     SKNode *node = [self nodeAtPoint:location];

     NSLog(@"touched node name: %@",node.name);
     NSLog(@"objects in spriteArray: %lu",(unsigned long)[spriteArray count]);

     NSMutableArray *discardedItems = [NSMutableArray array];
     for(SKNode *object in spriteArray)
     {
        if([object.name isEqualToString:node.name])
        {
           [object removeFromParent];
           [discardedItems addObject:object];
        }
    }
    [spriteArray removeObjectsInArray:discardedItems];

    NSLog(@"objects in spriteArray: %lu",(unsigned long)[spriteArray count]);

}

-(void)update:(CFTimeInterval)currentTime
{
    //
}

@end
#导入“MyScene.h”
@MyScene的实现
{
NSMutableArray*spriteArray;
int-nextobjectd;
}
-(id)initWithSize:(CGSize)大小
{
if(self=[super initWithSize:size])
{
spriteArray=[[NSMutableArray alloc]init];
nextObjectID=0;
//创建5个精灵

对于(int i=0;i什么样的方携带?),它不应该是[node removeFromParent];?我更正为square。我用removeFromParent尝试了它,但它不起作用。好的。我觉得问题是,你们每秒都要向同一个方添加新的方,所以,通过[square removeFromParent];只有最后一个分配给Square的节点被删除,这可能不是您点击的节点。。是的,每秒钟我都会向节点(对象)添加一个新的SpriteNode(Square)。嘿,sangony,非常感谢您的回答。我尝试过了,效果不错:-)