SpriteKit - 如何模拟Z轴重力?

时间:2014-07-06 18:30:28

标签: 2d sprite-kit game-physics

所以,我正在制作一个平台游戏的想法(涂鸦跳跃 - 超级跳跃),但在自上而下的观点中,我并没有让玩家上升,我希望它能够向前发展。 我的问题是我无法检测他是否跳过并错过了平台,我没有在这里使用引力,因为它会违背我正在处理的概念。

有什么想法吗?

-(void)didBeginContact:(SKPhysicsContact *)contact
{


if (contact.bodyA.categoryBitMask == KPlatformCategory) {
            NSLog(@"Contact");
    _currentPosition = (SKSpriteNode *)contact.bodyA.node;
            _contact = YES;
}

-(void)didSimulatePhysics
{
        if (_contact) {

   _player.position = CGPointMake(_currentPosition.position.x,     _currentPosition.position.y);
    }



}

}

修改

所以我一直在尝试几件事情,这是我最接近的事情。

我做了一些布尔等待一定的时间,然后检查_player.position = _platform.position它是否有效,但它有问题:

@property (nonatomic) bool gameOver;
@property (nonatomic) bool moved;

-(id)initWithSize:(CGSize)size {    
if (self = [super initWithSize:size]) {

    _gameOver = NO;
    _moved = NO;
}


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */

for (UITouch *touch in touches) {
    CGPoint location = [touch locationInNode:self];


    SKAction *fly = [SKAction moveByX:self.position.x y:self.position.y + 180 duration:1];
    [_player runAction:fly];


    _contact = NO;
    _moved = YES;

}

}

-(void)didBeginContact:(SKPhysicsContact *)contact
{
 if (contact.bodyA.categoryBitMask == KPlatformCategory) {
            NSLog(@"Contact");
    _currentPosition = (SKSpriteNode *)contact.bodyA.node;
    _currentHeight = _currentHeight + 180.0;
      _contact = YES;
      _moved = NO;
 }


-(void)didSimulatePhysics

{

    if (_contact) {

   _player.position = CGPointMake(_currentPosition.position.x, _currentPosition.position.y);
    }

if (_gameOver && _player.position.x != _currentPosition.position.x) {
    NSLog(@"Game Over");
    _foreGround.scrolling = NO;
}
}

-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */

if (_moved) {
    SKAction *time = [SKAction waitForDuration:2];
    SKAction *gameOver = [SKAction runBlock:^{
        _gameOver = YES;
    }];
    [_player runAction:[SKAction sequence:@[time,gameOver ]]];
}

我第一次点击并与平台联系时,一切都很好,但当我再次跳起并接触时,_gameOver变为真。

任何想法为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

我已经明白了。

PS:为什么这个社区的人倾向于抨击和批评而不是实际帮助?我觉得,除非这是非常容易或直接的问题,否则人们会忽略或试图表现为所有天才。 (不一定是在谈论那些在这里评论的人,但总的来说)