Cocos2d iphone COCOS2D-删除与其他精灵碰撞的子对象

Cocos2d iphone COCOS2D-删除与其他精灵碰撞的子对象,cocos2d-iphone,Cocos2d Iphone,我正在做一个游戏,让玩家控制宇宙飞船。我想这样做,如果飞船精灵与太空垃圾碰撞,垃圾就会消失 这是到目前为止我的代码 HelloWorldLayer.h #import <GameKit/GameKit.h> // HelloWorldLayer @interface HelloWorldLayer : CCLayerColor { CCSprite *_starShip; CCSprite *_Paddle1; CCSprite *_paddle2; } //

我正在做一个游戏,让玩家控制宇宙飞船。我想这样做,如果飞船精灵与太空垃圾碰撞,垃圾就会消失

这是到目前为止我的代码

HelloWorldLayer.h

 #import <GameKit/GameKit.h>


   // HelloWorldLayer
   @interface HelloWorldLayer : CCLayerColor
{
CCSprite *_starShip;
CCSprite *_Paddle1;
CCSprite *_paddle2;

}

// returns a CCScene that contains the HelloWorldLayer as the only child
+(CCScene *) scene;

@end
太空事物

#import <Foundation/Foundation.h>
#import "cocos2d.h"

@interface SpaceThings : CCSprite
@property (nonatomic, assign) int minMoveDirection;
@property (nonatomic, assign) int maxMoveDirection;

-(id)initWithFile:(NSString *)file minMoveDirection:(int)minMoveDirection maxMoveDirection:(int)maxMoveDirection;

@end

@interface Astroids : SpaceThings
@end

@interface SpaceJunk : SpaceThings
@end
我想知道在代码的哪里放置CGRECT部分。正如我目前尝试在SpaceJunk alloc init部分中放置的一样,当飞船与垃圾碰撞时,它不会移除子对象

    int setInterval = (arc4random() % 3);
    [self schedule:@selector(gameLgoic:) interval:setInterval];
将setInterval值设为float,并为schedular设置较小的值

也不要在循环内部执行
[spaceThings runAction
操作。如果需要,请执行一些条件检查,并仅在需要时运行

然后,当您的CGRectIntersectsRect彼此相交时将触发


愉快的编码。

我尝试了你的建议,但没有解决问题。太空垃圾精灵与飞船精灵重叠不会导致移除特定的太空垃圾孩子。请尝试[spaceThings removeFromParentAndCleanup:true];只尝试了{[spaceThings removeFromParentAndCleanup:YES];}问题仍然存在。您正在创建多个spaceThings循环实例,如果未命中CGRectIntersectsRect,则该对象始终在屏幕中…保留NSMutable数组并添加spaceThings的所有实例很好。我建议您将对象的创建放在外侧并存储在数组中,在发生碰撞时删除,并从中删除来自数组的父n。好的,快乐编码。学会成为专家!非常感谢您的建议。创建数组确实解决了问题。
#import "SpaceThings.h"


@implementation SpaceThings

-(id)initWithFile:(NSString *)file minMoveDirection:(int)minMoveDirection maxMoveDirection:(int)maxMoveDirection
{
    if ((self =[super initWithFile:file])){
    self.minMoveDirection = minMoveDirection;
    self.maxMoveDirection = maxMoveDirection;
    }
    return self;
}

@end

@implementation Astroids

-(id)init
{
    if (self = [super initWithFile:@"astroid.jpeg" minMoveDirection:2 maxMoveDirection:5]){

    }
    return self;
}

@end

@implementation SpaceJunk
-(id)init
{
    if (self = [super initWithFile:@"blueDot.jpg" minMoveDirection:4 maxMoveDirection:7]){

    }
    return self;
}


@end   
    int setInterval = (arc4random() % 3);
    [self schedule:@selector(gameLgoic:) interval:setInterval];