http://www.cnblogs.com/qianxudetianxia/archive/2011/06/07/2074326.html
分组的ListView的拖拽
http://www.cnblogs.com/qianxudetianxia/archive/2011/06/13/2079253.html
1.makefile文件的内容主要包含以下几个内容:
- 显示规则:显示规则说明了如何生成一个或者多个目标文件。即makefile的书写者明显的指出要生成的文件,文件的依赖关系,生成命令。如果有多个目标,默认第一个目标为最终目标。
- 隐晦规则:由于make有自动推导的功能,所以隐晦规则可以让我们比较粗略地书写makefile。
- 变量定义:makefile中可以定义一系列的变量,变量一般都是字符串,和C中的宏相似。当makefile被执行时,其中的变量都会被扩展到相应的引用位置上。
- 文件指示:一个makefile文件中可以引用另一个makefile。
- 注释:makefile中只有行注释,注释符:#,这个和java中的//一样。如果需要在makefile中使用“#”,可以使用反斜杠转义。
关于“隐晦规则”后续会进行学习说明。
注:makefile中的命令必须以Tab开始。
2.文件引用
语法:
include <filename>
注:
- filename中可以包含路径和通配符
- include前面可以有一些空字符,但是不可以以Tab键开始
示例:
有以下几个文件:a.mk b.mk c.mk foo.make
还有一个变量$(bar),其包含了e.mk f.mk
那么: include foo.make *.mk $(bar)
等价于 include foo.make a.mk b.mk c.mk e.mk f.mk
3.通配符的使用
make支持三种通配符:* ? [...]
- *:匹配0或多个字符
- ?:匹配任意单一字符
- [...]:匹配...中的任意单一字符
4.文件搜索
由于在一些大的工程中,源文件数量很多,所以当make需要找寻文件的依赖关系时,就需要知道文件的路径。
以下是设置路径的方法:
- makefile文件中的特殊变量“VPATH”
- make的关键字“vpath”(全部小写)
(1)VPATH:
当makefile中指定了这个变量,make就会在当前目录找不到的情况下到指定的目录文件中去找寻;否之,make只会在当前的目录文件中去寻找依赖文件和目标文件。
例如:VPATH=src:../headers
说明:
- 目录之间由":"分隔,所以上面的定义指定了两个目录:src ../headers
- 当前目录永远是最高级优先搜索的地方
(2)关键字:vpath
和上面的VPATH变量很类似,但是更为灵活。
使用方法有以下三种:
- vpath <pattern> <directories>
为符合模式<pattern>的文件指定搜索目录<directories>
- vpath <pattern>
清除符合模式<pattern>的文件的搜索目录
- vpath
清除所有已经被设置好了的文件搜索目录
说明:
- vpath使用方法中的<pattern>需要包含“%”字符,意思是匹配零个或者若干个字符
eg “%.h” :所有以“.h”结尾的文件
- <pattern>指定了要搜索的文件集,<directories>则指定了文件的搜索目录
eg vpath %.h ../headers :表示make在 ./headers目录下搜索所有以 .h 结尾的文件(如果在当前目录下没有找到的话)
- 可以连续的使用vpath,以指定不同的策略,make会按照语句顺序执行
eg vpath %.c foo
vpath % blish
vpath %.c bar
上一节讲述了粒子的相关问题,当然啦,不示弱,今天继续将物理系统给大家进行简单的介绍和讲述;
首先先介绍,如何在cocos2d中加入box2d开发lib包,因为一般使用cocos2d引擎进行开发游戏时,大家创建项目都会选用cocos2d框架,而不是直接采用物理系统的cocos2d框架,但是后期忽然需要在项目中使用物理系统(这种情况很经常发生,至于为什么,童鞋们都懂得~),OK,首先创建一个普通的cocos2d项目;
OK,加入box2d->lib步骤如下:
1. 首先将box2d的lib包拷贝到刚创建的项目下,然后右键项目的libs文件夹进行导入项目中;(如果你没有box2d的lib包,那就新建一个cocos2d-box2d的项目就有了)
2.双击你的项目名默认打开配置信息窗口,点击Build Settings标签,然后在页面中找到”Search Paths“一栏,然后在“User Header Search Paths”中添加“xx/libs”;这里的XX是你的项目名称;紧接着在“User Header Search Paths”一项的上面设置“Always Serch Paths”的选项 为YES,默认为NO;这里务必要设置;
3.最后commadn+B (我用的xcode For lion)编译项目代码,如果提示编译成功,OK,可以使用啦;
下面我来给大家简单的介绍以下如何在cocos2d中使用Box2d物理系统,虽然关于Box2d的相关资料和教程很少,但是这里我也不会很详细的介绍和解释,因为我即将上市的Android游戏开发书籍中已经对Box2d进行了很详细的讲解和两个物理小游戏实战,所以这里就大概的介绍下一些重要的方法;
便于讲解,这里我直接使用Xcode直接创建一个cocos2d-Box2d的项目,然后简单的修改:
//
// HelloWorldLayer.mm
// Box2dProject
//
// Created by 华明 李 on 11-9-14.
// Himi
//
// Import the interfaces
#import "HelloWorldLayer.h"
#define PTM_RATIO 32
// enums that will be used as tags
enum {
kTagTileMap = 1,
kTagAnimation1 = 1,
};
// HelloWorldLayer implementation
@implementation HelloWorldLayer
+(CCScene *) scene
{
CCScene *scene = [CCScene node];
HelloWorldLayer *layer = [HelloWorldLayer node];
[scene addChild: layer];
return scene;
}
// on "init" you need to initialize your instance
-(id) init
{
//初始化中,在屏幕上创建了物理世界,并且创建了在屏幕四周创建了刚体防止物理世界中的刚体超屏
//最后并且调用一个tick方法用于让物理世界不断的去模拟
if( (self=[super init])) {
self.isTouchEnabled = YES;
self.isAccelerometerEnabled = YES;
CGSize screenSize = [CCDirector sharedDirector].winSize;
CCLOG(@"Screen width %0.2f screen height %0.2f",screenSize.width,screenSize.height);
// Define the gravity vector.
b2Vec2 gravity;
gravity.Set(0.0f, -10.0f);
bool doSleep = true;
world = new b2World(gravity, doSleep);
world->SetContinuousPhysics(true);
// Debug Draw functions
m_debugDraw = new GLESDebugDraw( PTM_RATIO );
world->SetDebugDraw(m_debugDraw);
uint32 flags = 0;
flags += b2DebugDraw::e_shapeBit;
m_debugDraw->SetFlags(flags);
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0); // bottom-left corner
b2Body* groundBody = world->CreateBody(&groundBodyDef);
b2PolygonShape groundBox;
// bottom
groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(screenSize.width/PTM_RATIO,0));
groundBody->CreateFixture(&groundBox,0);
// top
groundBox.SetAsEdge(b2Vec2(0,screenSize.height/PTM_RATIO), b2Vec2(screenSize.width/PTM_RATIO,screenSize.height/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
// left
groundBox.SetAsEdge(b2Vec2(0,screenSize.height/PTM_RATIO), b2Vec2(0,0));
groundBody->CreateFixture(&groundBox,0);
// right
groundBox.SetAsEdge(b2Vec2(screenSize.width/PTM_RATIO,screenSize.height/PTM_RATIO), b2Vec2(screenSize.width/PTM_RATIO,0));
groundBody->CreateFixture(&groundBox,0);
CCLabelTTF *label = [CCLabelTTF labelWithString:@"Himi" fontName:@"Marker Felt" fontSize:32];
[self addChild:label z:0];
label.position = ccp( screenSize.width/2, screenSize.height-50);
[self schedule: @selector(tick:)];
}
return self;
}