Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在我的游戏中,有什么更好的碰撞方法?_Objective C_Sprite Kit_Collision Detection_Game Physics - Fatal编程技术网

Objective c 在我的游戏中,有什么更好的碰撞方法?

Objective c 在我的游戏中,有什么更好的碰撞方法?,objective-c,sprite-kit,collision-detection,game-physics,Objective C,Sprite Kit,Collision Detection,Game Physics,当角色与障碍物碰撞时,游戏结束。这在技术上是可行的,但我需要解决的问题是,角色能够与障碍物重叠,甚至可以在不结束游戏的情况下逃脱。为了让比赛结束,这两者需要真正的重叠 现在我认为问题可能是因为它们在同一位置碰撞。如果它们必须具有相同的位置,这是否意味着当它们的中心点/像素相遇时,位置到底是什么?它是图像的中心还是图像的边缘像素 我真的很挣扎,想得到一些帮助。谢谢大家! //CHARACTER COLLISION -(void)checkGameOver{ if(GAMESTART){

当角色与障碍物碰撞时,游戏结束。这在技术上是可行的,但我需要解决的问题是,角色能够与障碍物重叠,甚至可以在不结束游戏的情况下逃脱。为了让比赛结束,这两者需要真正的重叠

现在我认为问题可能是因为它们在同一位置碰撞。如果它们必须具有相同的位置,这是否意味着当它们的
中心点/像素
相遇时,位置到底是什么?它是图像的中心还是图像的边缘
像素

我真的很挣扎,想得到一些帮助。谢谢大家!

//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];
    }
  }
}
//字符冲突
-(无效)检查游戏结束{
如果(游戏开始){
if(flyCopter.position.x>=CGRectGetMaxX(self.frame)-flyCopter.copterWidth/2-6){
[自我炫耀];
}

如果(flyCopter.position.x如果您使用Sprite套件,请利用SKPhysicsBody和SKPhysicsWorld

首先,请阅读苹果的:


还可以查看本教程了解碰撞:

您可以查看box2d。它是非常常见的物理库