Я новичок в Spritebuilder и пытаюсь сделать прототип игры MARIO. Что я делаю, так это то, что у меня есть 2 спрайта, один спрайт имеет характер быстрой ходьбы, а другой - характер обычной ходьбы. Я меняю спрайт через кнопку. Когда я нажимаю на кнопку, обычно ходячий спрайт заменяется быстрым ходячим спрайтом, и снова нажав на эту кнопку, появляется обычный спрайт.
Проблема :
Впервые при запуске игры обнаруживается столкновение между землей и персонажем при прыжке. Но как только я меняю спрайт на быстро гуляющего персонажа, при прыжках не обнаруживается столкновение. Когда я снова переключаюсь на обычный ходячий персонаж, при прыжках также не обнаруживается столкновение.
Когда я заставляю спрайт прыгать, и он начинает падать вниз, на землю наблюдается какая-то активность (я бы предпочел сказать, что она отскакивает), о которой я также не могу сказать, отскакивает она или нет. Я не знаю, почему это происходит и как это исправить. Я искал переполнение стека и некоторые форумы. То, что я нашел, было использовать
CCphysicsBody.iterations
Но я не знаю, как его использовать. Для более подробного объяснения вы можете посмотреть видео по этой ссылке, чтобы понять всю проблему. https://www.dropbox.com/s/0fz3qehie76r60k/Game.mp4?dl=0< /а>
Пожалуйста помоги. Любые предложения приветствуются.
Изменить: вот код, в котором я меняю спрайты:
-(void)setCharacterAnimationFast
{
if (_turboButton.selected)
{
//changing button state;
_turboButton.selected=NO;
//changing value of background speed from screen;
speeedParameter = 50.0;
speedParameterOfBackgroundObjects=10.0;
//loading new chracter
_character =(RightCharacter*)[CCBReader load:@"RightCharacter"];
//position the laser at helicopter origin
CGPoint _characterPosition = _fastCharacter.position;
//transform the world position to the node space to which the laser will be added (_physicsNode)
_character.position = [_physicsNode convertToNodeSpace:_characterPosition];
//defining zorder for moving it to background
_character.zOrder= _fastCharacter.zOrder;
// add the laser to the physicsNode of this scene (because it has physics enabled)
[_physicsNode addChild:_character];
//removing the existing character
[_fastCharacter removeFromParentAndCleanup:YES];
CCLOG(@"ground : %@", _ground);
CCLOG(@"ground : %@", _ground.physicsBody);
CCLOG(@"ground : %@", _ground.physicsNode);
_ground.physicsBody.collisionMask=@[@"character"];
_character.physicsBody.collisionMask=@[@"ground"];
_ground.physicsBody.collisionType=@"ground";
_ground.physicsBody.elasticity=0;
_character.physicsBody.collisionType=@"character";
_character.physicsBody.elasticity=0;
_physicsNode.iterations=1000;
_fastCharacter=nil;
}
else
{
//changing button state
_turboButton.selected=YES;
//changing value of background speed from screen;
speeedParameter = 80.0;
speedParameterOfBackgroundObjects= 20.0;
//loading new fast character
_fastCharacter =(RightCharacterFast*)[CCBReader load:@"RightCharacterFast"];
//position the laser at helicopter origin
CGPoint _fastCharacterPosition = _character.position;
//transform the world position to the node space to which the laser will be added (_physicsNode)
_fastCharacter.position = [_physicsNode convertToNodeSpace:_fastCharacterPosition];
//defining zorder for moving it to background
_fastCharacter.zOrder= _character.zOrder;
// add the laser to the physicsNode of this scene (because it has physics enabled)
[_physicsNode addChild:_fastCharacter];
//removing the existing character
[_character removeFromParentAndCleanup:YES];
CCLOG(@"ground : %@", _ground);
CCLOG(@"ground : %@", _ground.physicsBody);
CCLOG(@"ground : %@", _ground.physicsNode);
_ground.physicsBody.collisionMask=@[@"fastCharacter"];
_fastCharacter.physicsBody.collisionMask=@[@"ground"];
_ground.physicsBody.elasticity=0;
_ground.physicsBody.collisionType=@"ground";
_fastCharacter.physicsBody.collisionType=@"fastCharacter";
_fastCharacter.physicsBody.elasticity=0;
_physicsNode.iterations=1000;
_character=nil;
}
}
А вот ссылка на видео отладочной отрисовки: https://www.dropbox.com/s/vt557ngpyj6z9g3/DebugDraw.mp4?dl=0