从旋转体射击

2024-04-09

我有一个旋转的敌人身体,可以发射子弹。它工作得相当不错,但它似乎会向所有方向射击,除了垂直向下。我已经有一段时间没有学三角函数了,我想我忘记了一些事情。我必须检查敌人的轮换吗?

        SKAction *shoot = [SKAction moveTo:CGPointMake(2000*cosf(enemy.zRotation),2000*sinf(enemy.zRotation)) duration:5];
        SKAction *remove = [SKAction removeFromParent];

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

下面是一艘可以 360 度旋转并从任何角度开火的船的代码。触摸屏幕左侧可轻微旋转飞船,触摸屏幕右侧可进行射击。

@implementation MyScene
{
    SKSpriteNode *ship1;
    SKShapeNode *beam1;
}

-(id)initWithSize:(CGSize)size 
{
    if (self = [super initWithSize:size])
    {
        //self.physicsWorld.contactDelegate = self;
        [self createSpaceships];
    }
    return self;
}


-(void)createSpaceships 
{
    ship1 = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(50, 50)];
    ship1.position = CGPointMake(300, 150);
    ship1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:ship1.size];
    ship1.physicsBody.dynamic = NO;
    [self addChild:ship1];

    SKSpriteNode *frontOfShip = [SKSpriteNode spriteNodeWithColor:[SKColor grayColor] size:CGSizeMake(2, 50)];
    frontOfShip.position = CGPointMake(25, 0);
    [ship1 addChild:frontOfShip];
}

// touch the left side of the screen to rotate the ship by +0.0785398 radians
// touch the right hand side of the screen to fire laser

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInNode:self.scene];

    if(touchLocation.x < self.size.width/2) // left side of screen
    {
        SKAction *block0 = [SKAction runBlock:^{
            ship1.zRotation = ship1.zRotation +0.0785398;
        }];
        [self runAction:block0];
    } else // right side of screen
    {
        int x = ship1.position.x + 1000 * cos(ship1.zRotation);
        int y = ship1.position.y + 1000 * sin(ship1.zRotation);

        beam1 = [SKShapeNode node];
        CGMutablePathRef pathToDraw = CGPathCreateMutable();
        CGPathMoveToPoint(pathToDraw, NULL, ship1.position.x, ship1.position.y);
        CGPathAddLineToPoint(pathToDraw, NULL, x, y);
        beam1.path = pathToDraw;
        [beam1 setStrokeColor:[UIColor redColor]];
        [self addChild:beam1];
    }
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    //[beam1 removeFromParent];
}

-(void)update:(CFTimeInterval)currentTime
{
    //
}

@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从旋转体射击 的相关文章

随机推荐