Ios 未在didBeginContact方法中调用类方法
我创建了两个类:一个处理投射物,另一个处理主场景本身。当我在didMoveToView或任何其他方法中调用类方法来生成投射物时,它可以工作,并且我能够看到投射物。但是,当我希望投射物在接触后繁殖时,它就不起作用了。我之前测试过触点,一切正常。我错过了什么 didBeginContact方法 类方法Ios 未在didBeginContact方法中调用类方法,ios,sprite-kit,skphysicscontact,Ios,Sprite Kit,Skphysicscontact,我创建了两个类:一个处理投射物,另一个处理主场景本身。当我在didMoveToView或任何其他方法中调用类方法来生成投射物时,它可以工作,并且我能够看到投射物。但是,当我希望投射物在接触后繁殖时,它就不起作用了。我之前测试过触点,一切正常。我错过了什么 didBeginContact方法 类方法 我错过了什么?当你遇到问题时,你不能说一切都正常。这就是我想听到更多的东西,特别是方法的哪些部分运行,哪些部分不运行?简单的断点和日志记录就能说明问题。看到有一个日志,你还能说它哪里出了问题吗?@le
我错过了什么?当你遇到问题时,你不能说一切都正常。这就是我想听到更多的东西,特别是方法的哪些部分运行,哪些部分不运行?简单的断点和日志记录就能说明问题。看到有一个日志,你还能说它哪里出了问题吗?@learncoso2d该方法完全按照我希望的方式工作,它创建并生成一个新的炸弹,在屏幕上生成,无论我在哪里调用该方法,除了didBeginContactit外,其他方法都具有相同的效果。在读了你的评论后,我刚刚修改了代码,添加了一个NSLog,显然该方法确实被调用了,但是对象本身并没有生成。你传递给pattern1的self对象是SKScene吗?@shaish Yep,现在我要添加填充注释,因为字符长度要求。尝试移动patternBomb.position=。。。在创建physicsBody的语句上方。
static inline Enemies *nodeFromBody(SKPhysicsBody *body1, SKPhysicsBody *body2, uint32_t category) {
Enemies *node = nil;
if (body1.categoryBitMask & category) {
node = (Enemies *)body1.node;
}
else if (body2.categoryBitMask & category) {
node = (Enemies *)body2.node;
}
return node;
}
-(void)didBeginContact:(SKPhysicsContact *)contact {
SKPhysicsBody *firstBody, *secondBody;
SKSpriteNode *projectile = nil;
SKSpriteNode *offScreen = nil;
Enemies *target = nil;
firstBody = contact.bodyA;
secondBody = contact.bodyB;
projectile = nodeFromBody(firstBody, secondBody, projectileCategory);
offScreen = nodeFromBody(firstBody, secondBody, offScreenCategory);
target = nodeFromBody(firstBody, secondBody, targetsCategory);
if (projectile && target) {
NSLog(@"firstShot");
[projectile removeFromParent];
// Below is the class method being invoked.
[ProjectilePatterns pattern1:self spawnPoint:CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))];
[target removeFromParent];
}
}
+(ProjectilePatterns *)pattern1:(SKScene *)scene spawnPoint:(CGPoint)location {
ProjectilePatterns *patternBomb = [ProjectilePatterns spriteNodeWithColor:[UIColor blueColor] size:CGSizeMake(20, 20)];
patternBomb.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:patternBomb.size];
patternBomb.physicsBody.categoryBitMask = projectileCategory;
patternBomb.physicsBody.contactTestBitMask = targetsCategory | offScreenCategory;
patternBomb.physicsBody.collisionBitMask = 0;
patternBomb.physicsBody.friction = 0;
patternBomb.physicsBody.linearDamping = 0;
patternBomb.position = CGPointMake(location.x + 20, location.y);
patternBomb.name = @"p1";
NSLog(@"works");
[scene addChild:patternBomb];
[patternBomb.physicsBody applyImpulse:CGVectorMake(3, 0)];
return patternBomb;
}