SpriteKit перемещает узлы быстрее со временем

Я хочу быстрее создавать объекты со временем, например. Я добавлял объект каждые 1,5 секунды. Этот объект движется к X = -100 с длительностью = 5. Через 30 секунд он должен двигаться быстрее.

-(id)initWithSize:(CGSize)size {    
if (self = [super initWithSize:size]) {

..... 

SKAction * Spawn = [SKAction performSelector:@selector(Enemy) onTarget:self];
SKAction * Delay = [SKAction waitForDuration:1.5];
SKAction * SpawnThenDelay = [SKAction sequence:@[Spawn, Delay]];
SKAction * SpawnThenDelayForever = [SKAction repeatActionForever:SpawnThenDelay];
[self runAction:SpawnThenDelayForever];

.....
}

- (void)Enemy {

Enemy = [SKSpriteNode spriteNodeWithImageNamed:@"Enemy.png"];
Enemy.size = CGSizeMake(85, 85);
Enemy.zPosition = 2;
Enemy.name = @"Enemy";

Enemy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(50, 50)];
Enemy.physicsBody.dynamic = NO;
Enemy.physicsBody.allowsRotation = NO;
Enemy.physicsBody.usesPreciseCollisionDetection = YES;
Enemy.physicsBody.restitution = 0;

Enemy.physicsBody.categoryBitMask = EnemyCategory;
Enemy.physicsBody.collisionBitMask = StoneCategory;
Enemy.physicsBody.contactTestBitMask = StoneCategory;

Enemy.position = CGPointMake(self.frame.size.width * 1.25, self.frame.size.height / 2.2);


SKAction * actionMove = [SKAction moveToX:-100 duration:5];
SKAction * actionMoveDone = [SKAction removeFromParent];

[Enemy runAction:[SKAction repeatActionForever:[SKAction sequence:@[actionMove,actionMoveDone]]]];

[self addChild:Enemy];
}

person Community    schedule 27.07.2014    source источник
comment
Добавьте свои спрайты в метод update:. Посмотрите на отметку времени правильного кадра, чтобы контролировать скорость появления.   -  person duci9y    schedule 27.07.2014


Ответы (2)


Каждое действие SKAction имеет свойство скорости, и по умолчанию каждое действие выполняется со скоростью 1, поэтому вы можете увеличить свойство скорости в соответствии с вашей игровой ситуацией.

person dragoneye    schedule 27.07.2014
comment
Да, я мог бы использовать SKAction SpeedTo, но я хочу ускорить своего врага через 30 секунд в игре. - person ; 30.07.2014

Вы можете сохранить скорость вашего врага как глобальную переменную и добавить NSTimer с интервалом в 30 секунд, и каждые 30 секунд таймер выполняет функцию, которая добавляет определенное значение к скорости врага. Но убедитесь, что есть ограничение скорости, иначе это будет слишком быстро.

Моя сцена.h:

#import <SpriteKit/SpriteKit.h>

@interface MyScene : SKScene {
    NSTimer *timer;
    int SpeedVar;
    int MaxSpeed;
    int IncreaseSpeedValue;
}

@end

Моя сцена.м:

-(id)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {
        timer = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(increaseSpeed) userInfo:nil repeats:YES];

        SpeedVar = -100;  //Normal speed of your enemy
        MaxSpeed = -300;  //Maximum speed of your enemy 
        IncreaseSpeedValue = 15; //Increase speed by this value every 30sec
    }
    return self;
}

-(void)increaseSpeed {

    if (SpeedVar > MaxSpeed)
        SpeedVar -= IncreaseSpeedValue;
    else {
        [timer invalidate];
        timer = nil;
    }
}
person Blackhawk    schedule 01.01.2015