对于不规则的精灵我们可以借助PhysicsEditor来制作shape ,

对于地图可以使用Tiled软件制作瓷砖地图。

今天主要记录一下如何把CCSprite与不规则刚体进行绑定,然后一起移动

//初始化玩家

1.加载shape文件,在init方法中添加:

//加载shape文件
[[GB2ShapeCache sharedShapeCache] addShapesWithFile:@"physicShape.plist"];

.plist文件内容大体如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!-- created with http://www.physicseditor.de --> <plist version="1.0">
<dict>
<key>metadata</key>
<dict>
<key>format</key>
<integer>1</integer>
<key>ptm_ratio</key>
<real>32</real>
</dict>
<key>bodies</key>
<dict> <key>Player1</key>
<dict>
<key>anchorpoint</key>
<string>{ 0.0000,0.0000 }</string>
<key>fixtures</key>
<array> <dict>
<key>density</key> <real>2</real>
<key>friction</key> <real>0</real>
<key>restitution</key> <real>0</real>
<key>filter_categoryBits</key> <integer>1</integer>
<key>filter_groupIndex</key> <integer>0</integer>
<key>filter_maskBits</key> <integer>65535</integer>
<key>isSensor</key> <false/>
<key>id</key> <string></string>
<key>fixture_type</key> <string>POLYGON</string> <key>polygons</key>
<array>
<array>
<string>{ 1.000,0.000 }</string>
<string>{ 32.000,0.000 }</string>
<string>{ 27.000,32.000 }</string>
<string>{ 7.000,32.000 }</string>
</array>
</array>
</dict>
</array>
</dict>
<key>RetroCoin</key>
<dict>
<key>anchorpoint</key>
<string>{ 0.0000,0.0000 }</string>
<key>fixtures</key>
<array> <dict>
<key>density</key> <real>2</real>
<key>friction</key> <real>0</real>
<key>restitution</key> <real>0</real>
<key>filter_categoryBits</key> <integer>1</integer>
<key>filter_groupIndex</key> <integer>0</integer>
<key>filter_maskBits</key> <integer>65535</integer>
<key>isSensor</key> <false/>
<key>id</key> <string></string>
<key>fixture_type</key> <string>POLYGON</string> <key>polygons</key>
<array>
<array>
<string>{ 4.000,3.000 }</string>
<string>{ 17.000,0.000 }</string>
<string>{ 28.000,3.000 }</string>
<string>{ 28.000,28.000 }</string>
<string>{ 16.000,32.000 }</string>
<string>{ 4.000,28.000 }</string>
</array>
</array>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>

2.初始化精灵和刚体及夹具

#pragma mark 初始化玩家
-(void)initPlayer{
//创建对象层 获得对象的产生点
CCTMXObjectGroup *objects=[_gameMap objectGroupNamed:@"objects"];
NSMutableDictionary *spawnPoint=[objects objectNamed:@"StartPoint"];
//获得出生点坐标
float x=[[spawnPoint valueForKey:@"x"] floatValue];
float y=[[spawnPoint valueForKey:@"y"] floatValue];
_player=[CCSprite spriteWithFile:@"Player1.png"];
_player.position=ccp(x,y);
_player.anchorPoint=CGPointZero; //设置描点为0,0 否则与刚体不能重合
b2BodyDef playerBodyDef; //定义刚体结构体的定义
[self addChild:_player]; playerBodyDef.type=b2_dynamicBody;
playerBodyDef.fixedRotation=true; //不会旋转
playerBodyDef.position.Set(x/PTM_RATIO, y/PTM_RATIO); _playBody=world->CreateBody(&playerBodyDef);
_playBody->SetUserData(_player);
[[GB2ShapeCache sharedShapeCache] addFixturesToBody:_playBody forShapeName:@"Player1"]; //为刚体设置夹具 }

3.在update函数中添加更新位置方法

for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {

        if (b->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *)b->GetUserData(); //获得精灵对象
if (sprite != nil) {
b2Vec2 bodyPos = b->GetPosition(); //获得刚体的位置
CGPoint pos = CGPointMake(bodyPos.x * PTM_RATIO, bodyPos.y * PTM_RATIO); //变换为坐标
float32 rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
sprite.position = pos;
sprite.rotation = rotation;
}
}
}

效果图:

转载请注明:版权所有http://1.wildcat.sinaapp.com/

cocos2d(CCSprite绑定不规则刚体与精灵一起移动)的更多相关文章

  1. 如何在Cocos2D 1.0 中掩饰一个精灵(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰一个精灵:实现代码 打开HelloWorldLayer.m并 ...

  2. 如何在Cocos2D 1.0 中掩饰一个精灵(四)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了完成需要的效果,我们将使用如下策略: 我们将首先绘制掩饰精灵 ...

  3. 如何在Cocos2D 1.0 中掩饰一个精灵(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 原帖来自Ray Wunderlich写的精彩的文章 How To ...

  4. cocos2d(CCSprite 用贝塞尔做抛物线,足球精灵并且同时做旋转放大效果)

    今天刚学到Cocos2d中的动作哪一张,自己做了一个用贝塞尔曲线足球精灵实现同时放大旋转和抛物线动作. 使用 [CCSpawn actions:,,]链接这几个动作,同时做.与CCSequence(一 ...

  5. 如何在Cocos2D 1.0 中掩饰一个精灵(五)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰和CCRenderTexture CCRenderTextu ...

  6. 如何在Cocos2D 1.0 中掩饰一个精灵(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 让我们开始吧 打开Xcode,从New Project中选择co ...

  7. Cocos2d Box2D之静态刚体

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. b2_staticBody 在模拟环境下静态物体是不会移动的,就好像有无限大的质量.在Box2D的内部会将质量至反,存储为零.静态物体也可 ...

  8. 关于CCSprite改变box2d刚体位置以及角度。

    同事今天在讨论一个事情,box2d中,body不可以直接设置位置,这样是不合理的,因为在物理的世界,你去左右它的物理检测.它就没有存在的必要了.但是,有人就想直接用box2d的碰撞.不用物理模拟.怎么 ...

  9. Cocos2d Box2D之浮动刚体

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. b2_kinematicBody 运动学物体在模拟环境中根据自身的速度进行移动.运动学物体自身不受力的作用.虽然用户可以手动移动它,但是通 ...

随机推荐

  1. 编译AVX代码,升级Redhat 5.5 GCC至4.7.1

    Redhat 的GCC编译器4.1版本号,为SSE4,AVX,AVX2支持不够好,官方建议4.7以上. 就这样开始了GCC升级之路. 因为Redhat 5.5它安装在一个虚拟机.全然解决,经过若干尝试 ...

  2. java_代码注释风格

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><templa ...

  3. 【高德地图API】如何获得行政区域?如何制作行政规划图?

    原文:[高德地图API]如何获得行政区域?如何制作行政规划图? 什么是行政规划图?如何获得每个行政区域的边界轮廓图?举例:重庆市 江北区.如图: 官方类参考:http://developer.amap ...

  4. 蜗牛—Hibernate之初识配置

    下载Hibernate的jar包 把下面jar文件考到项目lib下 然后在myeclipse中打开database的view视图创建一个新的数据库连接 接下来,配置连接,须要导入ORACLE的jar包 ...

  5. 深入理解C指针之五:指针和字符串

    原文:深入理解C指针之五:指针和字符串 基础概念 字符串可以分配到内存的不同区域,通常使用指针来支持字符串操作.字符串是以ASCII字符NUL结尾的字符序列.ASCII字符NUL表示为\0.字符串通常 ...

  6. REUSEADDR 选项

    一般而言,对于处理2MSL状态的套接字(一般为服务端套接字)是不允许接受从同一客户端重新发起一个新的连接的,但是套接字编程系统接口允许应用程序通过设置一个REUSEADDR选项,使处于2MSL状态的套 ...

  7. linux perm

    转自: http://www.linuxidc.com/Linux/2012-05/59693.htm 有修改 nd -perm,根据文件的权限来查找文件,有三种形式:find -perm modef ...

  8. 20款最好的免费的IDES和编辑器

    程序员编程利器:20款最好的免费的IDES和编辑器 Posted on 2015-02-17 21:52 尛鱼 阅读(170) 评论(1) 编辑 收藏 程序员编程利器:20款最好的免费的IDEs和编辑 ...

  9. 初创互联网公司简明创业指南 - YC新掌门Sam Altman

    本文只是一个创业指南的简明版 - 更详细的版本请查看:http://startupclass.samaltman.com 创业之前,你更应该去拥有一个好的创意,而不是一个公司.如果开始前你拥有一个好的 ...

  10. jquery自己主动旋转的登录界面的背景代码登录页背景图

    在其他网站上看到比较爽Web登录界面.背景图片可以自己主动旋转. 介绍给大家.有兴趣的可以改改下来作为自己的系统登录界面. 如图: watermark/2/text/aHR0cDovL2Jsb2cuY ...