【问题标题】:What would be a better method for collisions in my game?在我的游戏中碰撞有什么更好的方法?
【发布时间】:2014-12-09 08:00:28
【问题描述】:

当角色与障碍物发生碰撞时,游戏结束。它在技术上是可行的,但我需要解决的问题是角色能够与障碍物重叠,甚至在没有游戏结束的情况下逃脱。两者需要真正重叠才能导致游戏结束。

现在我认为问题可能是因为它们在同一位置发生碰撞。如果他们必须拥有相同的职位,这是否意味着他们的center point / pixel 会面,因为职位到底是什么?是图片的中心还是图片的边缘pixels

我真的很想解决这个问题,希望得到一些帮助。谢谢!

//CHARACTER COLLISION

-(void)checkGameOver{
if(GAMESTART){
    if(flyCopter.position.x >= CGRectGetMaxX(self.frame) - flyCopter.copterWidth/2 - 6){
      [self showOver];
    }

    if(flyCopter.position.x <= CGRectGetMinX(self.frame) + flyCopter.copterWidth/2 + 6){
      [self showOver];
    }

    [self compareCP:blockTmp1 :flyCopter];
    [self compareCP:blockTmp2 :flyCopter];
    if(flyCopter.position.y <= blockTmp1.position.y - 0 + blockTmp1.size.height + 0)
    if(flyCopter.position.x <= blockTmp1.position.x +20 + blockTmp1.size.width + 0)
    //if(flyCopter.position.y <= blockTmp2.position.y + blockTmp2.size.height)
    //if(flyCopter.position.x <= blockTmp2.position.x + blockTmp2.size.width)
    //if(flyCopter.position.y <= blockTmp3.position.y + blockTmp3.size.height)
    //if(flyCopter.position.x <= blockTmp3.position.x + blockTmp3.size.width)
    //if(flyCopter.position.y <= blockTmp4.position.y + blockTmp4.size.height)
    //if(flyCopter.position.x >= blockTmp4.position.x + blockTmp4.size.width)
    {
        [self compareCP:blockTmp3 :flyCopter];
        [self compareCP:blockTmp4 :flyCopter];
    }

    [self compareCP:blockTmp5 :flyCopter];
    [self compareCP:blockTmp6 :flyCopter];
    if(flyCopter.position.y <= blockTmp5.position.y - 0 + blockTmp5.size.height + 0)
    if(flyCopter.position.x <= blockTmp5.position.x +20 + blockTmp5.size.width + 0)

    {
        [self compareCP:blockTmp7 :flyCopter];
        [self compareCP:blockTmp8 :flyCopter];
    }

    [self compareCP:blockTmp9 :flyCopter];
    [self compareCP:blockTmp10 :flyCopter];
    if(flyCopter.position.y <= blockTmp9.position.y - 0 + blockTmp9.size.height + 0)
      if(flyCopter.position.x <= blockTmp9.position.x +20 + blockTmp9.size.width + 0)

    {
        [self compareCP:blockTmp11 :flyCopter];
        [self compareCP:blockTmp12 :flyCopter];
    }
  }
}


-(void)compareCP:(SKSpriteNode*)flyCopters : (SKSpriteNode*)blocks{
if(flyCopters){
        if ([blocks intersectsNode:flyCopters]) {
            [self showOver];
    }
  }
}

【问题讨论】:

  • 您可以勾选 box2d。这是很常见的物理库

标签: objective-c sprite-kit collision-detection game-physics


【解决方案1】:

如果您使用 Sprite Kit,请利用 SKPhysicsBody 和 SKPhysicsWorld。

首先阅读 Apple 的:Sprite Kit Guide

还可以查看本教程以了解碰撞:Space Invaders - Part 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2018-05-26
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多