【问题标题】:Collision between GameCharacter and ScrollingLayerGameCharacter 和 ScrollingLayer 之间的碰撞
【发布时间】:2011-11-20 15:46:56
【问题描述】:

我是 cocos2d 的新手,我通过“Learning cocos2d”一书完成了自己的工作。 就像在书中一样,当我的游戏角色移动时,我实现了一个滚动层来滚动。 我的问题如下:我正在使用普通的 Sprite 进行滚动层渲染,我可以检查我的角色是否正在触摸滚动层?

仅供参考:它是一条鱼,他需要游过一个洞,而且上面和下面都有墙,他应该无法进入岩石的前面或后面。

我搜索了互联网和这个论坛,但找不到任何合适的解决方案。 '平铺'是幸福的关键吗,我读到了碰撞的实现,但无法弄清楚它们是如何使用 tmx 实现的

有人可以帮助我吗?

【问题讨论】:

    标签: iphone objective-c ipad cocos2d-iphone collision-detection


    【解决方案1】:

    对于更简单但功能强大的碰撞检测,您很可能需要物理引擎。 我推荐 Chipmunk 引擎的 SpaceManager 扩展。

    在 Tiled 中,您可以将对象层添加到 tmx 文件中,您可以在其中列出所有障碍物。 这就是我在游戏场景中解析这些信息的方式:

    在初始化中:

    self.tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"TileMap.tmx"];
    ...
    smgr = [[SpaceManagerCocos2d alloc] init];
    smgr.constantDt = 1/60.0;
    smgr.gravity=ccp(0, 0);
    
    [smgr addWindowContainmentWithFriction:0.0 elasticity:0.0 size:CGSizeMake(1000, 1000) inset:cpvzero radius:1.0f]; //borders of your world, can be set from tmx size
    
    player = [smgr addCircleAt:ccp(x,y) mass:6 radius:15];
    

    在某处:

    - (void) drawWalls {
    //searching for object layer called "Collisions"
    CCTMXObjectGroup *objects = [_tileMap objectGroupNamed:@"Walls"];
    NSMutableDictionary * objPoint;
    int x ;
    int y ;
    int w ;
    int h ;
    
    for (objPoint in [objects objects]) {
        x = [[objPoint valueForKey:@"x"] intValue];
        y = [[objPoint valueForKey:@"y"] intValue];
        w = [[objPoint valueForKey:@"width"] intValue];
        h = [[objPoint valueForKey:@"height"] intValue];
        GameController *controller = [GameController sharedController];
        if(controller.retina==1)
        {
            x=x/2;
            y=y/2;
            w=w/2;
            h=h/2;
        }
    
        cpShape *staticShape = [smgr addRectAt:ccp(x+w/2,y+h/2) mass:STATIC_MASS width:w height:h rotation:0];
    }
    }
    

    然后,您可以对“玩家”对象施加力并在“更新”方法中更新您的精灵位置:

    playerSprite.position=ccp(player->body->p.x, player->body->p.y);
    

    当然您可以使用其他算法来检测碰撞,但这只是从 tmx 存储和检索此信息的示例。

    【讨论】:

    • Cocos2d 有一个支持retina tmx 的bug。如果您使用的是高清版本的瓦片地图,则应检索坐标和尺寸除以 2 的所有对象。
    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多