Ban*_*shi 5 objective-c ios ios7 sprite-kit
在我的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;
}
Run Code Online (Sandbox Code Playgroud)
石头从坐标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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
以上两种方法都是从update方法调用的.如果该男子击中任何5石头,那么游戏将再次重新加载.重新加载代码是:
[self.view presentScene:[[MyScene alloc] initWithSize:self.size] transition:[SKTransition doorsCloseHorizontalWithDuration:0.5f]];
Run Code Online (Sandbox Code Playgroud)
游戏重新加载,但几秒钟后错误信息显示EXC_BAD_ACCESS(代码= 2,地址= 0x0)就行了
SKSpriteNode *createStone = [SKSpriteNode spriteNodeWithTexture:[imageArray objectAtIndex:getRandomStoneImage]];
Run Code Online (Sandbox Code Playgroud)
请帮忙.提前致谢.
我还试图找出一些如何重置/重新启动SpriteKit游戏的信息,但没有成功。我没有花足够的时间来找出为什么在我的情况下会发生这种情况,可能应该尝试在转换发生之前进行一些清理,例如删除所有操作,也许删除所有节点......但我为自己找到了一个解决方法..
因此,当您调用/转换到当前所在的同一场景时,似乎会发生崩溃,所以我所做的是:
1)我过渡到ResetScene,它只是一个空场景 - 带有一些参数,以便我可以识别之前的场景
2)在DidMoveToView 的ResetScene中,我过渡回之前的场景
这就是我解决这个问题的方法,但我认为这不是一个理想的解决方案。请注意,您无法真正发现有 2 个转换而不是 1 个转换的区别。
让我们看看是否有人会以更多的智慧加入这个话题:)
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |