2014-01-26 148 views
1

我试图让我的游戏中的敌人射击子弹时遇到麻烦。问题是子弹纹理看起来不是来自敌人纹理。子弹纹理看起来离敌人的位置很远。看到下面的图片,了解我在说什么。不同的节点在屏幕上的位置和值

enter image description here 但是,英雄主角可以正常拍摄并且子弹纹理正常工作。 我想象这个问题是在碰撞交互中,敌人的纹理保持在墙壁之间,但是存储的位置保持着墙外的价值。这太奇怪了。

这里拍摄方法

-(void)disparo 
{ 
    DDLogVerbose(@"DISPARO de un enemigo."); 
    NSLog(@"DISPARO de un enemigo."); 

    CGPoint location = cobra.position; 
    self->balasyExplosionesAtlas = [SKTextureAtlas atlasNamed:@"Clouds"]; 
    SKSpriteNode *bullet = [SKSpriteNode spriteNodeWithTexture:[balasyExplosionesAtlas textureNamed:@"bala"]]; 

    NSLog(@"Posicion DISPARO-ENEMIGO --> x %f -- y %f", cobra.position.x, cobra.position.y); 
    bullet.position = CGPointMake(cobra.position.x, cobra.position.y + cobra.size.height/2); 
    // bullet.position = location; 
    bullet.zPosition = 1; 
    bullet.scale = 0.8; 

    bullet.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:bullet.size]; 
    bullet.physicsBody.dynamic = NO; 
    bullet.physicsBody.categoryBitMask = bulletCategory; 
    bullet.physicsBody.contactTestBitMask = enemyCategory; 
    bullet.physicsBody.collisionBitMask = 0; 

    SKAction *action = [SKAction moveToY:1000 duration:2]; 
    SKAction *remove = [SKAction removeFromParent]; 

    [bullet runAction:[SKAction sequence:@[action,remove]]]; 

    [cobra addChild:bullet]; 
} 

我加入了碰撞和接触定义为敌人的代码。我认为这是正确的,敌人,墙壁和英雄接触时不会像幽灵一样侵入。

cobra.physicsBody.categoryBitMask = CollisionTypeEnemmy; 
    cobra.physicsBody.contactTestBitMask = CollisionTypeEnemmy | CollisionTypePlayer | CollisionTypeWall; 
    cobra.physicsBody.collisionBitMask = CollisionTypeEnemmy | CollisionTypePlayer | CollisionTypeWall; 

与一般的碰撞定义参数:

typedef NS_ENUM(uint32_t, CollisionType) 
{ 
    CollisionTypePlayer    = 0x1 << 0, 
    CollisionTypeWall    = 0x1 << 1, 
    CollisionTypeExit    = 0x1 << 2, 
    CollisionTypeEnemmy    = 0x1 << 3, 
    CollisionTypeBulletPlayer  = 0x1 << 4, 
    CollisionTypeBulletEnemy  = 0x1 << 5 
}; 

回答

1

由于子弹是敌人(眼镜蛇)的子节点,它的位置是相对于眼镜蛇的位置。你将子弹的位置指定为眼镜蛇的位置 - 但相反,它确实会使子弹更加抵消。所以,如果你没有指定子弹的位置(0,0),它将被添加到眼镜蛇所在的位置。

改变子弹的位置:

bullet.position = CGPointMake(0, 0 + cobra.size.height/2); 

这应该做的伎俩。

您可以在Sprite Kit Programming Guide(构建您的场景 - >节点为其子项提供坐标系)中阅读更多信息。

+0

感谢您的回答。 –

+0

您还应该查看SKScenes的点转换方法。 – joshd

+0

关于孩子和父母的位置的另一个问题。我想绘制一个中心应该在纹理中心的圆形节点。我尝试使用子中心位置(0.0f,0.0f),但子节点出现在右上方。任何想法在纹理的中心绘制圆心?提前致谢。 –

相关问题