当我重新加载游戏时,我的spritekit游戏崩溃了吗?

 玉米的跟屁虫 发布于 2023-02-08 12:54

在我的spritekit游戏中,我通过更新方法随机创建Stone.这是我随机创建石头的代码

//Create random island
-(void)createRandomStone:(NSMutableArray *)imageArray
{

    int getRandomNumberCoordinate = [self getRandomNumberBetween:(int)0 to:(int)768];
    int getRandomStoneImage = [self getRandomNumberBetween:0 to:(int)([imageArray count] - 1)];

    NSLog(@"Stone Image name = %d", getRandomStoneImage);

    SKSpriteNode *createStone = [SKSpriteNode spriteNodeWithTexture:[imageArray objectAtIndex:getRandomStoneImage]];

    if((getRandomNumberCoordinate + createStone.size.height / 2) > 768 )
        createIsland.position = CGPointMake(_myScreenSize.width + createStone.size.width, 768 - createStone.size.height / 2);
    else if((getRandomNumberCoordinate - createStone.size.height / 2) < 0 )
        createStone.position = CGPointMake(_myScreenSize.width + createStone.size.width, 0 + createIsland.size.height / 2);
    else
        createStone.position = CGPointMake(_myScreenSize.width + createStone.size.width, getRandomNumberCoordinate);
    createStone.name = @"Stone";
    createStone.zPosition = 3;
    [self addChild:createStone];

    //Apply physics on the Stone

    createStone.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize: CGSizeMake(createStone.size.width - createStone.size.width / 4, createStone.size.height - createStone.size.height / 6)];
    createStone.physicsBody.categoryBitMask = CollisionTypeStone;
    createStone.physicsBody.contactTestBitMask = CollisionTypeMan;
    createStone.physicsBody.usesPreciseCollisionDetection = YES;
    createStone.physicsBody.collisionBitMask = 0;
}

石头从坐标1024移动到0,如果任何石头越过0坐标,石头将通过使用代码移除

-(void)updateStonePosition:(NSString *)whichDirection andMoveAmount:(float)speed
{
    for (SKNode* node in self.children)
    {
    if([node.name isEqualToString:@"Stone"])
    {
        node.position = CGPointMake(node.position.x - speed, node.position.y);
        if(node.position.x < -node.frame.size.width / 2)
            [node removeFromParent];

    }  
   }
  }

以上两种方法都是从update方法调用的.如果该男子击中任何5石头,那么游戏将再次重新加载.重新加载代码是:

[self.view presentScene:[[MyScene alloc] initWithSize:self.size] transition:[SKTransition doorsCloseHorizontalWithDuration:0.5f]];

游戏重新加载,但几秒钟后错误信息显示EXC_BAD_ACCESS(代码= 2,地址= 0x0)就行了

SKSpriteNode *createStone = [SKSpriteNode spriteNodeWithTexture:[imageArray objectAtIndex:getRandomStoneImage]];

请帮忙.提前致谢.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有