2014-01-26 153 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),但子節點出現在右上方。任何想法在紋理的中心繪製圓心?提前致謝。 –

相關問題