首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-(SKPhysicsContact *)拒绝开火

-(SKPhysicsContact *)拒绝开火
EN

Stack Overflow用户
提问于 2013-12-30 22:59:29
回答 1查看 873关注 0票数 0

1)我在SKScene头上设置了委托协议:

代码语言:javascript
复制
@interface WorldScene : SKScene <SKPhysicsContactDelegate>

2)我派代表到物理学界:

代码语言:javascript
复制
- (id) init
{
    self = [super init];
    if (self)
    {
        self.physicsWorld.gravity = CGVectorMake(0,0);
        self.physicsWorld.contactDelegate = self;
        self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
    }
    return self;
}

3)我设置了我的口罩:

代码语言:javascript
复制
static const uint32_t playerCategory  =  0x1 << 0;
static const uint32_t wallsCategory  =  0x1 << 1;
static const uint32_t endCategory  =  0x1 << 2;

4)我让我的球员:

代码语言:javascript
复制
    SKSpriteNode *player = [[SKSpriteNode alloc] initWithColor:[SKColor blueColor] size:CGSizeMake(PLAYERSIZE, PLAYERSIZE)];
player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:player.size];
player.name = @"player";
player.physicsBody.dynamic = YES;
player.physicsBody.categoryBitMask = playerCategory;
player.physicsBody.collisionBitMask = wallsCategory;
player.physicsBody.contactTestBitMask = endCategory;

5)我做了我的最后一块瓷砖:

代码语言:javascript
复制
SKSpriteNode *tile = [[SKSpriteNode alloc] initWithColor: [SKColor whiteColor] size:CGSizeMake(TILESIZE,TILESIZE)];

if ([cell isEnd]){
    tile.color = [SKColor greenColor];
    tile.name = @"endTile";
    tile.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize: tile.size];
    NSLog(@"END TILE OF SIZE %f x %f", tile.size.width, tile.size.height);
    tile.physicsBody.dynamic = YES;
    tile.physicsBody.affectedByGravity = NO;
    tile.physicsBody.categoryBitMask = endCategory;
    tile.physicsBody.collisionBitMask = 0;
    tile.physicsBody.contactTestBitMask = playerCategory;

}

6)但这件事从来没有人叫过!

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

    NSLog(@"Touched!");
    [self removeAllChildren];
}

我在做迷宫游戏。玩家目前与所有的墙壁碰撞罚款,但我希望游戏结束时,它到达最后一块瓷砖。目前,未调用联系人事件。我真的不知道出了什么问题,我的调试器输出设置为显示所有输出(无论如何,如果它到达事件,所有的子程序都应该被移除)。

何必

EN

回答 1

Stack Overflow用户

发布于 2014-01-11 04:30:12

解决了--结果是它从来没有被调用过,所以委托实际上没有被设置。将所有init代码移到- (void) didMoveToView:(SKView *)视图中,并开始正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20849009

复制
相关文章

相似问题

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