2016-04-12 2 views
0

Я стараюсь, чтобы понг, как игра, был с одной стороны - это игрок и другой компьютер, потому что я хочу в будущем добавить много игровых сцен с разными игровыми полями. Я создаю шаровой узел, узел весла и т. д., чтобы упростить вставку в игровые поля, и у меня нет их создания на каждой сцене с нуля.
Проблема Теперь, когда я стараюсь, чтобы все было выполнено вместе с игровыми манипуляторами, работает узел шара, но компьютерное весло появляется на секунду, а затем исчезает. Вот что я получил в: GameScene.mComputerNode не отображается объектив c

@implementation GameScene 

-(void)didMoveToView:(SKView *)view { 

self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; 
self.physicsBody.categoryBitMask = gamefieldCategory; 
self.physicsBody.contactTestBitMask = emptyCategory; 
self.physicsWorld.contactDelegate = self; 

BallNode *ball = [[BallNode alloc] init]; 
[self addChild:ball]; 
ball = (BallNode *) [self childNodeWithName:@"ball"]; 
[ball resetPosition]; 

PlayerNode *leftPlayer = [[PlayerNode alloc] initOnLeftSide]; 
[self addChild:leftPlayer]; 
leftPlayer = (PlayerNode *) [self childNodeWithName:@"leftPlayer"]; 
[leftPlayer positionOnLeftSide]; 

ComputerNode *rightPlayer = [[ComputerNode alloc] initOnRightSide]; 
[self addChild:rightPlayer]; 
rightPlayer = (ComputerNode *) [self childNodeWithName:@"rightPlayer"]; 
[rightPlayer positionOnRightSide];  
} 
-(void)computer{ 
BallNode *ball = (BallNode *) [self childNodeWithName:@"ball"]; 
ComputerNode *rightPlayer = (ComputerNode *) [self childNodeWithName:@"rightPlayer"];  
if (ball.position.x > CGRectGetMidX(self.frame)) { 
    if (rightPlayer.position.y > ball.position.y) { 
     rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, rightPlayer.position.y -1.5f); 
    //there is a very long text, thats why i cut it off 
    } 
    } 
- (void)update:(CFTimeInterval)currentTime{ 
     [self computer]; // calling computer paddle movement. 
} 

ComputerPaddleNode.m

@implementation ComputerPaddleNode 
- (id)init 
{ 
return [self initWithName:@"paddle"]; 
} 

- (id)initWithName:(NSString *)name 
{ 
    self = [super init]; 
    if (self) { 

    self = [ComputerPaddleNode spriteNodeWithImageNamed: @"board.png"]; 
    self.userInteractionEnabled = YES; 
    self.name = name; 
    self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.frame.size]; 
    self.physicsBody.dynamic = NO; 
    self.physicsBody.usesPreciseCollisionDetection = YES; 
    self.physicsBody.categoryBitMask = paddleCategory; 
    self.physicsBody.collisionBitMask = emptyCategory; 

} 

return self; 
} 

- (BOOL)withinParentFrame:(CGPoint)point 
{ 
CGFloat offset = self.size.height/2; 
if (point.y >= offset && point.y <= self.scene.frame.size.height - offset) 
    return YES; 
else 
    return NO; 
} 
- (CGPoint)normalisePoint:(CGPoint)point 
{ 
CGFloat x = point.x/(self.size.width/2); 
if (x > 1.0) 
    x = 1.0; 
else if (x < -1.0) 
    x = -1.0; 

CGFloat y = point.y/(self.size.height/2); 
if (y > 1.0) 
    y = 1.0; 
else if (y < -1.0) 
    y = -1.0; 

return CGPointMake(x,y); 
    } 
@end 

ComputerNode.m

@implementation ComputerNode 
-(id)init 
{ 
     return [self initOnRightSide]; 
    } 
- (id)initOnRightSide 
    { 
    self = [super init]; 
    if (self) { 
     self.name = @"rightPlayer"; 
    ComputerPaddleNode *rightPaddle = [[ComputerPaddleNode alloc] initWithName:@"rightPaddle"]; 
    [self addChild:rightPaddle]; 
    ScoreNode *score = [[ScoreNode alloc] initWithName:@"rightScore"]; 
    [self addChild:score]; 
    } 
    return self; 
    } 
    - (void)positionOnRightSide 
    { 
SKNode *paddle = [self childNodeWithName:@"rightPaddle"]; 
paddle.position = CGPointMake(CGRectGetMaxX(self.parent.frame) -50, CGRectGetMidY(self.parent.frame)); 
} 
@end 

Почему Компьютерный узел исчезает и то, что мне нужно это изменить? (Извините за мой плохой enghlish)

ответ

2

В этом фрагменте кода

- (void)positionOnRightSide 
    { 
    SKNode *paddle = [self childNodeWithName:@"rightPaddle"]; 
    paddle.position = CGPointMake(CGRectGetMaxX(self.parent.frame) -50, CGRectGetMidY(self.parent.frame)); 
    } 

вы позиционируете самостоятельно «s ребенок весла в системе координат родителя родителя самости в (самом-х" прародитель "). Помните, что кадр узла уже относится к системе координат его родителя.

Это может быть причиной того, что весло вашего правого игрока исчезает на вас.

+0

Спасибо, это была проблема – artG

Смежные вопросы