2016-04-12 28 views
0

Bir tarafta oyuncu ve diğer tarafta bilgisayar pong yapmak için çalışıyorum çünkü gelecekte oynamak istiyorum farklı oyun alanları ile birçok oyun sahneleri eklemek istiyorum top düğümü, kürek düğümü ayrı ayrı olarak, oyun alanlarına yerleştirmeyi kolaylaştırmak ve her sahnede sıfırdan yaratmalarını sağlamak.
Sorun Şimdi her şeyi bir araya getirdiğim zaman raket çalıyor, top düğümü çalışıyor, ancak bilgisayar kürsüsü ikinci kez gösteriliyor ve sonra kayboluyor. Bilgisayar düğüm kaybolur Neden ComputerNode.mComputerNode nesnel görünmüyor c

@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 

GameScene.m

@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 

ve hangi: İşte ne var olan bunu değiştirmem gerekiyor mu? Bu kod snippet'inde

cevap

2

(benim kötü Enghlish için üzgünüm)

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

siz "kendiliğin ebeveynin ebeveynin koordinat sisteminde (öz adlı yılında kendini 'ın çocuk raket konumlandırma büyükbaba "). Bir düğümün çerçevesinin zaten ebeveyninin koordinat sistemine başvurduğunu unutmayın.

Bu, sağ oyuncunun raketinin sizin üzerinde kaybolmasının nedeni olabilir.

+0

Teşekkür ederim, sorun buydu – artG