Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以圆形图案拍摄对象SpriteKit_Ios_Xcode_Sprite Kit_Sprite_Skaction - Fatal编程技术网

Ios 以圆形图案拍摄对象SpriteKit

Ios 以圆形图案拍摄对象SpriteKit,ios,xcode,sprite-kit,sprite,skaction,Ios,Xcode,Sprite Kit,Sprite,Skaction,我真的不知道如何解释我想要什么,所以我画了一些(非常)艺术性的图表来帮助传达这个想法。我也会尽力解释清楚 我基本上是想从屏幕中央的一个圆圈“发射”子弹/激光/任何东西,并让它以相当快的速度重复这一过程。这里有两张照片显示了我想要实现的目标:(没有足够的声誉在这里发布它们 (一) 这就是我想要子弹射出的地方,我想要多少 (二) 这几乎就是最终的结果,我希望他们反复开火,让屏幕看起来像这样 有人能告诉我为了达到这个目的我应该看什么吗?据我所知,你希望这个精灵每X秒发射一束射弹 SKActio

我真的不知道如何解释我想要什么,所以我画了一些(非常)艺术性的图表来帮助传达这个想法。我也会尽力解释清楚

我基本上是想从屏幕中央的一个圆圈“发射”子弹/激光/任何东西,并让它以相当快的速度重复这一过程。这里有两张照片显示了我想要实现的目标:(没有足够的声誉在这里发布它们

(一) 这就是我想要子弹射出的地方,我想要多少

(二) 这几乎就是最终的结果,我希望他们反复开火,让屏幕看起来像这样


有人能告诉我为了达到这个目的我应该看什么吗?

据我所知,你希望这个精灵每X秒发射一束射弹

    SKAction *ShootProjectiles = [SKAction runBlock:^{ 
                        //Create Projectile1
                          projectile1.physicsBody.applyImpulse(CGVectorMake(1, 0)); //Shoot directly right
                          //Create Projectile2
                          projectile2.physicsBody.applyImpulse(CGVectorMake(1, 1)); //Shoot diagnally Up and to the right
                          //Follow this pattern to create all projectiles desired to be shot in one burst

    }];

   SKAction *delayBetweenShots = [SKAction scaleBy:0 duration:5];
   SKAction* ShootSequence= [SKAction repeatActionForever:[SKAction sequence:@[ShootProjectiles, delayBetweenShots]]];
   [self runAction: ShootSequnce];

这样做的目的是创建所需数量的投射物,并沿所定义向量的方向发射它们。然后等待5秒(scaleBy:0操作除了延迟之外什么都不做)然后一次又一次地重复,直到你移除动作。

在处理圆时,通常更容易使用极坐标。在这种情况下,每个方向都可以用大小和角度表示,其中大小是施加到子弹上的力/冲量,角度是射击公牛的方向et

基本步骤是

  • 确定方向数
  • 通过将2*PI(360度)除以方向数来确定角度增量
  • 从角度=0开始
  • 按角度指定的方向发射子弹
  • 将角度和幅值转换为笛卡尔坐标以形成向量
  • 使用矢量对子弹施加脉冲或力
  • 逐角度递增
  • 以下是如何在Obj-C中实现这一点的示例:

    @implementation GameScene {
        CGFloat angle;
        SKTexture *texture;
        CGFloat magnitude;
        CGFloat angleIncr;
    }
    
    -(void)didMoveToView:(SKView *)view {
        /* Setup your scene here */
    
        long numAngles = 15;
        magnitude = 1;
    
        angleIncr = 2 * M_PI / numAngles;
        angle = 0;
    
        texture = [SKTexture textureWithImageNamed:@"Spaceship"];
    
        SKAction *shootBullet = [SKAction runBlock:^{
            SKSpriteNode *bullet = [SKSpriteNode spriteNodeWithTexture:texture];
            bullet.size = CGSizeMake(8, 8);
            bullet.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:bullet.size.width/2];
            bullet.physicsBody.affectedByGravity = NO;
            bullet.position = self.view.center;
            bullet.zRotation = angle-M_PI_2;
            [self addChild:bullet];
            CGFloat dx = magnitude * cos(angle);
            CGFloat dy = magnitude * sin(angle);
            CGVector vector = CGVectorMake(dx,dy);
            [bullet.physicsBody applyImpulse:vector];
            angle = fmod(angle+angleIncr,2*M_PI);
        }];
    
        SKAction *wait = [SKAction waitForDuration:0.25];
    
        SKAction *shootBullets = [SKAction sequence:@[shootBullet, wait]];
    
        [self runAction:[SKAction repeatActionForever:shootBullets]];
    }
    

    在您的实现中,您到底被困在了什么地方?