Jump to content

Objective-c Sprite Kit Node neparādās uz ekrāna


artG
 Share

Recommended Posts

Sveiki,cenšos uztaisīt mazu spēlīti līdzīgu ping pong kur ir spēlētājs pret kompi. man rādās problēma - rightPlayer jeb datora/pretinieka dēlītis parādāš uz sekundi un pazūd,tas pat neizkustas no vietas, izmantojot NSLog rāda ziņojumu,ka dators tiek izsaukts,kā arī ,ka dati no ComputerNode ir saņemti,kā arī funkcija -(void)computer tiek izsaukta un strādā.  Ko es esmu palaidis garā, un kā man to izlabot?

GameScene.m :

@implementation GameScene

-(void)didMoveToView:(SKView *)view {
    SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"back0.png"];
    background.size = self.frame.size;
    background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
    background.zPosition = -10;
    [self addChild:background];
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; self.physicsBody.categoryBitMask = gamefieldCategory; self.physicsBody.contactTestBitMask = emptyCategory; self.physicsWorld.contactDelegate = self; 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) {
        
        
    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);
        }
        if(rightPlayer.position.y < ball.position.y){
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, rightPlayer.position.y +1.5f);
        }
        if (rightPlayer.position.y < self.frame.origin.y) {
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, rightPlayer.position.y);
        }
        if (rightPlayer.position.y > self.frame.origin.y + self.frame.size.height) {
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, self.frame.origin.y + self.frame.size.height);
        }
    }
    if(ball.position.x > CGRectGetMidX(self.frame)+ self.frame.size.width/4 ){
        if (rightPlayer.position.y > ball.position.y) {
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, rightPlayer.position.y -2.4f);
        }
        if(rightPlayer.position.y < ball.position.y){
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, rightPlayer.position.y +2.4f);
        }
        if (rightPlayer.position.y < self.frame.origin.y) {
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, rightPlayer.position.y);
        }
        if (rightPlayer.position.y > self.frame.origin.y + self.frame.size.height) {
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, self.frame.origin.y + self.frame.size.height);
        }
    }
    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.f);
        }
        if(rightPlayer.position.y < ball.position.y){
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, rightPlayer.position.y +1.f);
        }
        if (rightPlayer.position.y < self.frame.origin.y) {
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, rightPlayer.position.y);
        }
        if (rightPlayer.position.y > self.frame.origin.y + self.frame.size.height) {
            rightPlayer.position = CGPointMake(self.frame.origin.x - 50 + self.frame.size.width, self.frame.origin.y + self.frame.size.height);
        }
    }
}
}
- (void)update:(CFTimeInterval)currentTime { [self computer]; } 

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
Labots - artG
Link to comment
Share on other sites

 

 

ja vēl izstāstītu visu - kas, kur rādās un kurā brīdī, ieliktu visu kodu, tad vēl varētu cerēt, ka kāds iedziļināsies
 

tagad es papildināju tekstu un kodu.

 

 

bet ieteiktu pašam risināt, sākot ar kaut ko pavisam primitīvu, to palaist un tad jau "ping-pong"
 

Es jau to mēģinu, pirms tam biju uztaisījis tieši to pašu tikai divu spēlētāju ping-pong spēli, gribēju papildināt,lai pašam interesantāk

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...