1
我试图让我的游戏中的敌人射击子弹时遇到麻烦。问题是子弹纹理看起来不是来自敌人纹理。子弹纹理看起来离敌人的位置很远。看到下面的图片,了解我在说什么。不同的节点在屏幕上的位置和值
但是,英雄主角可以正常拍摄并且子弹纹理正常工作。 我想象这个问题是在碰撞交互中,敌人的纹理保持在墙壁之间,但是存储的位置保持着墙外的价值。这太奇怪了。
这里拍摄方法
-(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
};
感谢您的回答。 –
您还应该查看SKScenes的点转换方法。 – joshd
关于孩子和父母的位置的另一个问题。我想绘制一个中心应该在纹理中心的圆形节点。我尝试使用子中心位置(0.0f,0.0f),但子节点出现在右上方。任何想法在纹理的中心绘制圆心?提前致谢。 –