我在尝试让游戏中的敌人发射子弹时遇到了麻烦。问题是子弹纹理似乎不是来自敌人的纹理。子弹纹理看起来离敌人的位置很远。请参阅下图以了解我在说什么。
但是,英雄主角可以正常射击并且子弹纹理工作正常。 我想问题出在碰撞交互中,敌人的纹理保持在墙之间,但存储的位置使值保持在墙外。这太奇怪了。
这里是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/