多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
1.CCNode节点类的属性 ~~~ //锚点-------------------------------- CCLabelTTF *lifeLabel = [CCLabelTTF labelWithString:@"生命值:" fontName:@"Arial" fontSize:20]; //锚点设置 lifeLabel.anchorPoint = CGPointMake(1, 1); //把postion 点作为label的左上角 lifeLabel.position = ccp(120, winSize.height - 120); [self addChild:lifeLabel z:10]; CCLabelTTF *lifeLabel2 = [CCLabelTTF labelWithString:@"生命值2:" fontName:@"Arial" fontSize:20]; //锚点设置 lifeLabel2.anchorPoint = CGPointMake(0.5, 0.5);//把postion 点作为label的几何中心 lifeLabel2.position = ccp(120, winSize.height - 120); [self addChild:lifeLabel2 z:10]; CCLabelTTF *lifeLabel3 = [CCLabelTTF labelWithString:@"生命值3:" fontName:@"Arial" fontSize:20]; //锚点设置 lifeLabel3.anchorPoint = CGPointMake(0, 0);////把postion 点作为label的右下角 lifeLabel3.position = ccp(120, winSize.height - 120); [self addChild:lifeLabel3 z:10]; ~~~ ![](https://box.kancloud.cn/2016-08-22_57bab5585c038.jpg) ![](https://box.kancloud.cn/2016-08-22_57bab55875624.jpg) ~~~ //CCNode 节点类------------------- /*节点类的属性 1.anchorPoint 锚点 2.camera 游戏视角 3d使用 3.children 子节点. (addchild:)children 为节点的子节点数组,变量类型是CCArray 4.contentSize //未转化的节点大小,也就是本身的宽,高 :主要用于碰撞检测 */ //得到精灵的矩形区域 CCLabelTTF *label = [CCLabelTTF labelWithString:@"sprite" fontName:@"Arial" fontSize:20]; label.position = ccp(100, 100); [self addChild:label]; CCSprite *sprite = [[CCSprite alloc]initWithFile:@"hero_1.png"]; sprite.position = ccp(50, 50); [self addChild:sprite]; //NSLog(@"%@",[self rectOfSprite:sprite]); NSLog(@"(%f,%f,%f,%f)",[self rectOfSprite:sprite].origin.x,[self rectOfSprite:sprite].origin.y,[self rectOfSprite:sprite].size.width,[self rectOfSprite:sprite].size.height); //(9.000000,-10.500000,82.000000,121.000000) ~~~ 得到精灵位置的类->用于碰撞检测 ~~~ //这个矩形位置 是依赖 左下角作为原点进行的 - (CGRect)rectOfSprite:(CCSprite *)sprite { //依赖位置坐标和contentSize进行转换,默认的锚点是 (0.5 ,0.5) return CGRectMake(sprite.position.x - sprite.contentSize.width/2, sprite.position.y - sprite.contentSize.height/2, sprite.contentSize.width, sprite.contentSize.height); } ~~~ 2.CCNode节点类的方法 1)子节点的处理 ~~~ //1.子节点的处理-------------- //1)创建一个node CCNode *node = [CCNode node]; //2增加一个子节点 CCNode *childNode = [CCNode node]; [node addChild:childNode z:10 tag:1]; //3使用tag获得子节点 CCNode *tagNode = [node getChildByTag:1];//等于 childNode //4使用tag删除子节点 [node removeChildByTag:1];//删除了childNode //5通过节点指针删除节点 [node removeChild:childNode cleanup:YES];//如果cleanup 为yes,则停止运行中的任何动作 //6删除一个节点的所有节点 [node removeAllChildrenWithCleanup:YES]; //7从当前节点的父节点删除当前节点 [childNode removeFromParentAndCleanup:YES]; ~~~ 2)子节点执行的动作 ~~~ //2执行动作 ----------------- id action = [CCAction action]; [action setTag:2]; //1运行action动作 [node runAction:action]; //2停止该节点的所有动作 [node stopAllActions]; //3停止某个特定的动作/依赖tag [node stopAction:action]; [node stopActionByTag:2]; //4获取当前节点的某个特定动作 id tempAction = [node getActionByTag:2]; //5获取某节点的所有动作的数量 int numberOfActions = [node numberOfRunningActions]; ~~~ 3)预定消息 ~~~ //3预定消息 //1)每帧都调用的更新方法 - (void)scheduleUpdates { [self scheduleUpdate]; } - (void)update:(ccTime)delta { //游戏中每一帧都将调用此方法 } //2)为消息安排优先级 从小到大开始执行,顺序是 3-> 1 ->2 //1)每帧都调用的更新方法 - (void)scheduleUpdates1 { [self scheduleUpdate]; } - (void)scheduleUpdates2 { [self scheduleUpdateWithPriority:1]; } - (void)scheduleUpdates3 { [self scheduleUpdateWithPriority:-1]; } //3)指定运行特定的更新方法 并设置调用的时间间隔 - (void)scheduleUpdates4 { [self schedule:@selector(updateTenTimesPerSecond:) interval:0.1f]; } - (void)updateTenTimesPerSecond:(ccTime)delta { } ~~~ ~~~ //4)停止某个节点的某个指定选择器,但是不会停止 预定的更新方法 [self unschedule:@selector(updateTenTimesPerSecond:)]; //如果停止预定的更新方法 [self unscheduleUpdate]; //5停止节点的所有选择器,保罗 schduleupdate里设置的Update 选择期.但是不会停止节点的动作 [self unscheduleAllSelectors]; //6)_cmd 关键字停止当前方法的预定 [self unschedule:_cmd]; ~~~ 4.其他的方法:(不完全) ~~~ //4.其他方法 //1) 获取节点的边框 CGRect spriteBound = [sprite boundingBox];//==rectOfSprite // //2)清除所有的动作和预定的方法 [sprite cleanup];// //坐标转换.... //3)绘制自己的节点 // - (void)draw{}; //4)-(id)init 初始化方法 //5 - (void)onEnter 回调方法:当 CCNode 进入舞台的时候调用 //6 - (void)onEnterTransitionDidFinished //带有过渡效果的进入舞台的时候调用 // - (void)OnExit //离开舞台时候调用 ~~~