- 浏览: 434058 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
IThead:
纠结了几天,用了你的方法,现在解决了,谢谢!
Eclipse 写Javascript卡死问题 -
Rubicon__:
你好,我在运用PageWidget这个类时,出现第一页翻到第二 ...
android翻书效果实现原理( 贝塞尔曲线绘制原理/点坐标计算) -
lionios:
如果不显示printDialog,则打印出来的是空白页,请问你 ...
Print打印机例子 -
rayln:
weiqiulai 写道哥们儿,我怎么没有看到监控队列的配置和 ...
JMS监听MQ实例 -
weiqiulai:
哥们儿,我怎么没有看到监控队列的配置和代码?
JMS监听MQ实例
新建一个cocos2d-chipmunk项目
首先AppDelegate.m中加入
初始化!!
然后添加类
TestWorld.h
首先AppDelegate.m中加入
- (void)applicationDidFinishLaunching:(UIApplication *)application{ cpInitChipmunk(); }
初始化!!
然后添加类
TestWorld.h
// // TestWorld.h // TestPiking // // Created by Rayln Guan on 10/3/13. // Copyright 2013 __MyCompanyName__. All rights reserved. // #import <Foundation/Foundation.h> #import "cocos2d.h" #import "chipmunk.h" #import "TestSprite.h" #import "TestSprite2.h" @interface TestWorld : CCLayerColor { cpSpace *space; cpShape *wall[4]; } + (CCScene *)scene; @end
// // TestWorld.m // TestPiking // // Created by Rayln Guan on 10/3/13. // Copyright 2013 __MyCompanyName__. All rights reserved. // #import "TestWorld.h" @implementation TestWorld + (CCScene *)scene{ TestWorld *t = [TestWorld node]; CCScene *s = [CCScene node]; [s addChild: t]; return s; } - (id)init{ if(self = [self initWithColor:ccc4(166, 166, 166, 255)]){ self.isAccelerometerEnabled = YES; self.isTouchEnabled = YES; //init physics [self initPhysics]; [self initSprite]; [self scheduleUpdate]; } return self; } -(void) initSprite{ TestSprite *t1 = [[TestSprite alloc] initWithSpace:space]; [self addChild:t1 z:0 tag:1]; TestSprite2 *t2 = [[TestSprite2 alloc] initWithSpace:space]; [self addChild:t2 z:0 tag:1]; } //该方法是触发chipmunk的重新渲染 -(void) update:(ccTime)time{ // Should use a fixed size step based on the animation interval. int steps = 2; CGFloat dt = [[CCDirector sharedDirector] animationInterval]/(CGFloat)steps; for(int i=0; i<steps; i++){ cpSpaceStep(space, dt); } } -(void) initPhysics{ CGSize s = [[CCDirector sharedDirector] winSize]; //创建一个space space = cpSpaceNew(); //设置一个重力的x,y,即是垂直和横向的重力 space->gravity = ccp(10, 10); //物理空间设定默认的碰撞回调函数,它的设置是针对全局的,也就是物理空间里任何对象的碰撞都会执行设定的回调函数 //cpSpaceSetDefaultCollisionHandler //设定自定义的碰撞回调规则 cpSpaceAddCollisionHandler(space, 1, 2, begin, NULL, NULL, NULL, NULL); //设置四面墙壁 wall[0] = cpSegmentShapeNew( space->staticBody, cpv(0,0), cpv(s.width,0), 0.0f); // top wall[1] = cpSegmentShapeNew( space->staticBody, cpv(0,s.height), cpv(s.width,s.height), 0.0f); // left wall[2] = cpSegmentShapeNew( space->staticBody, cpv(0,0), cpv(0,s.height), 0.0f); // right wall[3] = cpSegmentShapeNew( space->staticBody, cpv(s.width,0), cpv(s.width,s.height), 0.0f); for( int i=0;i<4;i++) { //摩擦力 cpShapeSetElasticity( wall[i], 1.0f ); //反作用力 cpShapeSetFriction( wall[i], 1.0f ); cpSpaceAddStaticShape(space, wall[i] ); } } static int begin(cpArbiter *arb, cpSpace *space, void *unused){ // Get pointers to the two bodies in the collision pair and define local variables for them. // Their order matches the order of the collision types passed // to the collision handler this function was defined for //CP_ARBITER_GET_SHAPES取出是哪两个shape发生了碰撞,a,b是emery还是bullet,与之前设置回调函数时的第2,3参数的顺序有关 CP_ARBITER_GET_SHAPES(arb, a, b); NSLog(@"begin collision p_x:%1.1f p_y:%1.1f",a->body->p.x,a->body->p.y); NSLog(@"%i, %i", a->collision_type, b->collision_type); // additions and removals can't be done in a normal callback. // Schedule a post step callback to do it. // Use the hook as t he key and pass along the arbiter. //我们不能直接在begin函数里面释放刚体或者shape,要等chipmunk做完必要的计算后才能释放。cpSpaceAddPostStepCallback用来安全的完成这个步骤 cpSpaceAddPostStepCallback(space, (cpPostStepFunc)postStepRemove, a, NULL); // The object is dead, don't process the collision further //返回1是物体撞击事件有效 //返回0是物体撞击事件无效 return 1; } //碰撞的处理函数 static void postStepRemove(cpSpace *space, cpShape *shape, void *unused) { TestSprite *sprite = shape->data; assert(sprite.tag == 1); if( sprite ) { //[sprite removeFromParentAndCleanup:YES]; } } @end
// // TestSprite.h // TestPiking // // Created by Rayln Guan on 10/3/13. // Copyright 2013 __MyCompanyName__. All rights reserved. // #import <Foundation/Foundation.h> #import "cocos2d.h" #import "chipmunk.h" @interface TestSprite : CCSprite { cpSpace *space; cpShape *shape; cpBody *body; } - (id)initWithSpace:(cpSpace *)space; - (void)setShape:(cpSpace *)space; @end
// // TestSprite.m // TestPiking // // Created by Rayln Guan on 10/3/13. // Copyright 2013 __MyCompanyName__. All rights reserved. // #import "TestSprite.h" @implementation TestSprite - (id)initWithSpace:(cpSpace *)space_{ if (self = [self initWithFile:@"Icon-72.png"]) { self.position = ccp(100, 100); self.tag = 1; int num = 4; CGPoint vers[4] = { ccp(-36, -36), ccp(-36, 36), ccp(36, 36), ccp(36, -36) }; space = space_; //cpBodyNew创建一个刚体,参数如下:刚性质量,刚性惯性值。 //惯性值的计算使用chipmunk提供的cpMomentForPoly助手函数,参数如下:刚体质量。多边形点数量。多边形点的坐标集。偏移量,会作用到每个点,设为CGPointZero会让事情简单很多。 body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, vers, CGPointZero)); //设置body的位置 body->p = ccp(100, 100); cpSpaceAddBody(space, body); shape = cpPolyShapeNew(body, num, vers, CGPointZero); //自定义一个类型,用于回调函数用,否则不会回调 shape->collision_type = 1; //shape->e = .5f;shape->u = .5f; shape->data = self; cpSpaceAddShape(space, shape); //cpSpaceAddStaticShape(space, shape); //cpSpaceSetGravity( space, cpv(0, -100) ); } return self; } - (void)setShape:(cpSpace *)space_{ //shape = shape_; space = space_; } //重写该方法,返回YES,这样可以触发nodeToParentTransform方法 - (BOOL)dirty{ return YES; } //重烩Sprite,如果不懂什么意思,可以直接用该方法 -(CGAffineTransform) nodeToParentTransform { CGFloat x = body->p.x; CGFloat y = body->p.y; if ( ignoreAnchorPointForPosition_ ) { x += anchorPointInPoints_.x; y += anchorPointInPoints_.y; } // Make matrix CGFloat c = body->rot.x; CGFloat s = body->rot.y; if( ! CGPointEqualToPoint(anchorPointInPoints_, CGPointZero) ){ x += c*-anchorPointInPoints_.x + -s*-anchorPointInPoints_.y; y += s*-anchorPointInPoints_.x + c*-anchorPointInPoints_.y; } // Translate, Rot, anchor Matrix transform_ = CGAffineTransformMake( c, s, -s, c, x, y ); return transform_; } - (void)removeFromParentAndCleanup:(BOOL)cleanup{ // cpSpaceRemoveBody(space, shape->body); // cpBodyFree(shape->body); // // cpSpaceRemoveShape(space, shape); // cpShapeFree(shape); [super removeFromParentAndCleanup:cleanup]; } @end
发表评论
-
【iOS-Cocos2d游戏开发之十四】音频/音效/视频播放(利用Cocos2D-iPhone-Extensions嵌入Cocos2d进行视频播放!)
2013-11-18 11:04 718李华明Himi 原创,转载务必在明显处注明: 转载自【黑米Ga ... -
MAC系统下COCOS2D-X(IPHONE-ANDROID)及IDE的开发环境搭建
2013-11-11 16:30 1237最近正在做移动多平台对应游戏框架的调查,因为之前业余时间一直使 ... -
CCCallFunc
2013-11-08 14:08 697猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网– ... -
Sprite Kit学习笔记(一)初探
2013-11-06 21:23 1117转载:http://blog.csdn.net/k ... -
绘制图形
2013-10-15 13:40 740转载:http://book.2cto.com/201304/ ... -
CocosBuilder各元素渲染完成后的回调函数
2013-10-13 18:00 1117在调用ccbi文件后很多时候需要做一次元素渲染完成后的回调函数 ... -
Retina屏幕的支持
2013-10-12 15:54 5441。 由于retina和普通屏像素相差2倍,所以需要一套高清图 ... -
ccTouchesBegan 中如何让获取的坐标是相对整个屏幕的坐标,而不是在当前view的坐标
2013-10-11 13:36 771ccTouchesBegan 中如何让获取的坐标是相对整个屏幕 ... -
关于内存管理的几个基本要点!!(例子)
2013-10-08 15:25 705首先:如果alloc一个对象就必须要释放代码 比如: Te ... -
定位程序出错位置
2013-10-03 15:03 693在.m文件中加入 #ifdef _FOR_DEBUG_ -( ... -
多线程之NSThread、NSOperation、NSInvocationOperation
2013-10-01 21:46 757IOS中支持多线程操作,使用NSThread和NSInvoca ... -
简单的数据存储
2013-09-26 10:09 764// // ViewController.h // d ... -
TabView在底部的使用
2013-09-24 14:41 831通过UITabBarController去实现多页面切换效果 ... -
TabView的使用
2013-09-24 13:57 1002多页面的tab使用,就是ActionBar。直接看例子 其实就 ... -
TableView分组Group写法
2013-09-22 17:05 839需要多实现方法 首先需要在xib的视图文件中修改TableVi ... -
TableView的使用
2013-09-22 16:19 717在界面上拖一个TableView控件在可视区域。定义一个Pro ... -
实现alert弹出框
2013-09-22 10:34 775首先需要先实现UIAlertViewDelegate协议,这样 ... -
Copy方法
2013-09-13 22:42 802NSArray NSMutableArray copy NSA ... -
NSObject 和 反射的使用
2013-09-13 15:50 990// // main.m // Refect // ... -
NSNull
2013-09-09 16:30 713NSNull是为了解决字典等各种类不能放null而用的,这个对 ...
相关推荐
【标题】"IOS应用源码之基于cocos2d和chipmunk的DEMOCrayonBallDemo.rar" 提供了一个iOS平台上的游戏开发实例,它使用了Cocos2d和Chipmunk这两个流行的游戏开发框架。这个源码库可能是为了展示如何在iOS设备上创建一...
通过研究这个源码,开发者不仅可以了解如何在iOS上使用Cocos2D和Chipmunk,还能学习到游戏开发中的基本架构设计、物理模拟以及用户交互的实现技巧。这个Demo对于初学者来说是一个很好的实践项目,而对于有经验的...
这个源码库为我们提供了深入学习iOS游戏开发的机会,尤其是对Cocos2d和Chipmunk这两个核心工具的使用。 Cocos2d是一个开源的2D游戏开发框架,广泛应用于iOS、Android和Mac OS X等平台。它提供了丰富的图形绘制、...
通常这种事情都是交给物理引擎来做 但它们使用的过程中有个令人讨厌的地方 参数太多了 为了初始化一个简单的场景要写很多代码 在cocos2d x 3 0版本中 出现了一个新类族 physicals 它将Box2D或者chipmunk做了一层封装...
在Cocos2d-js中,集成的Chipmunk物理引擎是一个重要的组成部分,用于实现游戏中的物理模拟效果,如重力、碰撞检测以及物体动态行为等。 Chipmunk是源自C语言的一个轻量级2D物理引擎,以其高效和易于使用而受到青睐...
Cocos2d与Chipmunk的结合在iOS游戏开发中扮演着重要角色,尤其对于创建2D物理模拟游戏而言,这种组合尤为常见。Cocos2d是一款强大的2D游戏引擎,而Chipmunk则是一个高效的2D物理库,两者配合能实现复杂的物理效果,...
1. **场景(Scene)与层(Layer)管理**:Cocos2d-x使用场景和层的概念组织游戏画面。场景是一个完整的屏幕视图,而层则是场景中的一个可独立管理的部分,多个层可以组合成一个场景。 2. **精灵(Sprite)与动画**...
Cocos2d-JS是一款强大的2D游戏开发框架,它结合了JavaScript的灵活性与Cocos2d-x的高效性能,让开发者能够轻松地创建跨平台的游戏。本篇将深入探讨Cocos2d-JS的游戏开发知识,从基础到进阶,帮助你掌握这一利器。 ...
2. **JavaScript绑定**:Cocos2d-x如何将C++底层库与JavaScript结合,提供JSB(JavaScript Bindings),让开发者能够使用JavaScript编写游戏逻辑。 3. **图形渲染**:学习如何使用Cocos2d-x的绘图API,包括纹理、...
3. **Cocos2d API**:这个版本提供了与Cocos2d-x相似的API,使得开发者可以从Cocos2d-x轻松过渡到Cocos2d-html5。这些API包括精灵(Sprite)、层(Layer)、场景(Scene)、动作(Actions)等,它们构成了游戏的基本...
4. **物理引擎集成**:通过Box2D或Chipmunk物理引擎,cocos2d-x允许开发者创建具有真实物理行为的游戏对象,如碰撞检测和重力模拟。 5. **脚本支持**:除了使用C++,cocos2d-x还支持JavaScript(通过Cocos2d-JS)和...
在cocos2d-x中,我们可以利用物理引擎如Box2D或 Chipmunk进行复杂的碰撞检测,也可以使用简单的矩形碰撞检测函数如`cc.rectIntersectsRect()`来检查两个矩形是否相交。此外,cocos2d-x还支持自定义的碰撞检测算法,...
Cocos2d-x是一个广泛使用的开源游戏开发框架,它使用C++语言,支持多平台发布,包括iOS、Android以及Windows等,具有高效、灵活和强大的特性。 塔防类游戏是一种策略游戏,玩家通过在地图上的特定位置建造防御设施...
在iOS平台上进行游戏开发,Cocos2d是一个广泛使用的开源框架,特别适合创建2D游戏、演示和其他图形/交互式应用程序。本教程将带你深入学习如何利用Cocos2d为iPhone和iPad构建游戏。 首先,我们需要了解Cocos2d的...
12. **游戏保存与加载(Save & Load)**:了解如何使用Cocos2d-js的持久化存储,保存游戏进度和用户数据。 13. **性能优化(Performance Optimization)**:学习如何调试和优化JavaScript代码,提高游戏运行效率。 ...
cocos2d-js是一款强大的跨平台2D游戏开发框架,其中集成的物理引擎是基于Chipmunk库实现的,为开发者提供了丰富的物理模拟功能。本文将深入探讨cocos2d-js如何利用Chipmunk物理引擎制作出引人入胜的游戏Demo。 首先...
Cocos2d-x 3.0 开发(九)使用Physicals代替Box2D和chipmunk的3.0 alpha1新版本 对应于Coco2d-x 3.0 alpha1 使用,更新之前3.0 alpha0 的 文件。相关博客地址:...
在Cocos2d-x的默认项目中,你可能会看到对Chipmunk的一些注释,这些注释通常是为了帮助开发者理解如何配置和使用物理世界。例如,注释可能解释了如何初始化物理空间,设置重力,添加静态和动态物体,以及如何处理...
3. **物理引擎集成**:Cocos2d-x通常与Box2D或Chipmunk物理引擎配合使用,为游戏添加真实的物理模拟。这些物理引擎的接口也被封装在DLL中,方便XNA开发者使用。 4. **音频支持**:Cocos2d-x提供跨平台的音频播放...
此外,物理引擎如Box2D或Chipmunk可与Cocos2d集成,实现物理模拟。 5. **事件处理与用户交互**: - Cocos2d提供了事件监听机制,使得游戏可以响应用户的触摸、键盘输入或其他设备事件。学习如何设置触摸和键盘监听...