ios - 屏幕中不同的节点位置和值

标签 ios objective-c macos sprite-kit

我在尝试让游戏中的敌人发射子弹时遇到了麻烦。问题是子弹纹理似乎不是来自敌人的纹理。子弹纹理看起来离敌人的位置很远。请参阅下图以了解我在说什么。

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

这里是shoot方法的代码

-(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;

以及一般的 Collision 定义参数:

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

最佳答案

由于子弹是敌人(眼镜蛇)的子节点,它的位置是相对于眼镜蛇的位置。您将子弹位置指定为眼镜蛇位置 - 但它真正做的是更多地抵消子弹。因此,如果您不指定项目符号的位置 (0, 0),它将添加到眼镜蛇所在的位置。

将项目符号位置更改为:

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

这应该可以解决问题。

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

关于ios - 屏幕中不同的节点位置和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21362927/

相关文章:

ios - UITabBar 显示更多图标而不是 "More"选项

iphone - 如何捕获 iphone 中的所有异常?

iphone - 将核心数据添加到现有的 iPhone 应用程序

objective-c - 你如何移动 NSImageView?

java - 如何用Java获取Mac应用程序文件夹

c++ - 转到 C++ 中的控制台位置(在 OSX 上)

ios - 将 Google Cast SDK 添加到 64 位版本

ios - 让 AVPlayer 填满整个屏幕

iOS 7 模态视图转换和背景/墙纸

ios - 字典 pList 的数组仅返回数组的索引