2013-12-24 6 views
0

Я пытаюсь использовать новый SKSpritenode, мне удалось создать Spritenode, перемещая его по экрану, хотя я хочу, чтобы Spritenode оставил след (цвет), куда он перемещается.Нарисуйте путь перемещающегося SKSpritenode

код для создания узла Sprite & мои попытки создать стиль в качестве дочернего элемента для спрайта (который не работает).

-(void)movetherayoflight{ 

    ray1=[[lightray1 alloc]initWithColor:[SKColor redColor] size:CGSizeMake(6,6)]; 
    [ray1 setPosition:CGPointMake(50, 50)]; 
    ray1.physicsBody=[SKPhysicsBody bodyWithRectangleOfSize:ray1.size]; 
    ray1.physicsBody.restitution=1; 
    ray1.physicsBody.linearDamping=0; 
    ray1.physicsBody.friction=0; 
    ray1.physicsBody.allowsRotation=NO; 
    ray1.physicsBody.velocity=CGVectorMake(0.0f, 300.0f); 
    [self addChild:ray1]; 

    SKShapeNode *raayyy=[[SKShapeNode alloc]init]; 
    CGMutablePathRef rayPath = CGPathCreateMutable(); 

    CGPoint fff=CGPointMake(ray1.position.x, ray1.position.y); 
    CGPoint startpoint=CGPointMake(50, 100); 
    //CGPathAddLines(rayPath, NULL, &fff, 2); 
    CGPathAddLines(rayPath, NULL, &startpoint, 5); 
    //CGPathAddLineToPoint(rayPath, NULL, ray1.position.x, ray1.position.y); 
    raayyy.path=rayPath; 
    raayyy.lineWidth = 1.0; 
    //raayyy.fillColor = [SKColor whiteColor]; 
    raayyy.strokeColor = [SKColor greenColor]; 
    raayyy.glowWidth = 0.5; 
    [ray1 addChild:raayyy]; 


} 

Если у вас есть решение, пожалуйста, дайте мне знать!

ответ

1

Вместо того чтобы сделать SKShapeNode дочерним по отношению к SKSpriteNode, объявите его своим родным братом в SKScene.

Сначала объявите SKShapeNode и CGPath как переменные экземпляра.

В -initWithSize: методе вашей сцены,

raayyy=[[SKShapeNode alloc]init]; 
//Additional initialization here. 

rayPath = CGPathCreateMutable(); 
CGPathMoveToPoint(pathToDraw, NULL, ray1.position.x, ray1.position.y); 
rayyy.path = rayPath; 
[self addChild:rayyy]; 

Тогда в вашем методе -update:,

CGPathAddLineToPoint(rayPath, NULL, yar1.position.x, ray1.position.y); 
rayyy.path = rayPath; 

Это просто предложение, я не пробовал ничего из подобного себе.

0

хорошо, мне удалось его решения, но я действительно не люблю его до сих пор

-(SKShapeNode*)gravityline{ 
    SKShapeNode *lolo = [[SKShapeNode alloc] init]; 
    CGPoint fff=CGPointMake(ray1.position.x, ray1.position.y); 
    CGMutablePathRef path = CGPathCreateMutable(); 
    CGPathMoveToPoint(path, NULL, fff.x, fff.y); 
    CGPathAddLineToPoint(path, 0,rayoriginpoint.x,rayoriginpoint.y); 
    CGPathCloseSubpath(path); 
    lolo.path = path; 
    [email protected]"gravityline"; 
    lolo.strokeColor=[SKColor greenColor]; 
    lolo.glowWidth=.1; 
    lolo.physicsBody=[SKPhysicsBody bodyWithPolygonFromPath:path]; 
    lolo.physicsBody.categoryBitMask=raylightCategory; 
    lolo.physicsBody.collisionBitMask=batCategory; 
    lolo.physicsBody.contactTestBitMask=batCategory; 
    lolo.physicsBody.dynamic=NO; 
    CGPathRelease(path); 

    return lolo; 
} 

rayoriginpoint меняет свое значение после того, как точка луча попадает что-то

if (firstBody.categoryBitMask == rayCategory && secondBody.categoryBitMask==mirrorCategory) 
{ 
    [self addChild:[self gravityline]]; 
    CGPoint p = contact.contactPoint; 
    rayoriginpoint=p; 

    NSLog(@"Contact have been made"); 
} 

Что я хочу do очень просто: 1- Либо изменить цвет каждой CGPOINT, что SKSpritenode Passes на 2- Либо создать узел Sprite, который масштабируется в определенном направлении, пока он не достигнет чего-то, а затем изменит directc