cocos2d_类层次结构

6、iOS游戏开发:cocos2d引擎基础与实践 本文详细介绍了使用cocos2d引擎进行iOS游戏开发的基础知识与实践技巧。内容涵盖iOS Simulator的局限性、日志记录的最佳实践、cocos2d的场景图与CCNode类架构、节点动作与消息调度的使用方法,以及性能优化和调试建议。通过一个简单的射击游戏案例,展示了如何在实际项目中应用这些概念,帮助开发者构建高效、稳定的游戏应用。 阅读详情

CCScene

之前也提到过,CCScene是场景类,它相当于一个大容器,将包含在内的层和精灵输出到屏幕上,是整个树的根节点。其实CCScene的内部构成非常简单,虽然继承自CCNode,但没有在它的基础上增加任何成员变量和方法,只是重构了init。由此可以看出,其实CCScene并没有屏显的作用,其实它的作用只是承上启下,之前说过,节点只有被加到树中才会更新逻辑以及绘制,绘制的方法visit是节点实现的,场景只是把节点添加到树中使其可以执行该函数,然后导演类激活场景实例,使它构成的树生效(树可以有多个,但只有导演类激活的树才有效,在cocos2d中导演类最多只能激活一个树)。

-(id) init

导演类只重构了CCNode的一个方法,就是init,它用setContentSize方法将屏幕的尺寸传递给场景,使其默认和屏幕一样大,将锚点设置为(0.5, 0.5)并将其锁定。

CCLayer

层的作用主要有两个:一是容纳精灵等节点,使它们被包含进场景(层的父节点肯定是场景,因为导演类只能和场景实例相关联);二是接收用户的输入操作,这里cocos2d打了一个标签,分别实现iphone和mac的处理逻辑,因为二者的输入方式有差异,iphone支持重力感应,而mac支持鼠标和键盘。(由于我们研究的主要是移动开发,所以暂时只讲iphone的逻辑)

CCLayer声明了两个参数:

BOOL isTouchEnabled_
很好理解,是否支持触摸响应。

BOOL isAcceleromterEnabled_
是否支持重力感应。

-(id) init

重构的初始化方法,和CCScene一样,设置了锚点和宽高(和屏幕一样),此外还将isTouchEnabled_和isAcceleromterEnabled_置为NO。

-(void) registerWithTouchDispatcher

将自己注册进CCTouchDispatch,这是管理触摸信息的类,在该类注册的对象才有被分发到触摸信息的可能,具体原理在后面的章节中会单独介绍,现在我们只要会使用层就可以了。当层可以被触摸时该方法会自动执行,所以开发者也不用对它太过纠结。

-(BOOL) isAccelerometerEnabled

返回对象的isAcceleromterEnabled_,即检测该层是否支持重力感应。

-(void) setIsAccelerometerEnabled: (BOOL)enabled

设置对象的的isAcceleromterEnabled_,使其允许或拒绝对重力的感应。

-(BOOL) isTouchEnabled

返回对象的isTouchEnabled_,即检测该层是否支持触摸响应。

-(void) set isTouchEnabled: (BOOL)enabled

设置对象的的isTouchEnabled_,使其允许或拒绝对触摸的响应。如果允许,会向
CCTouchDispatch注册,如果不允许则注销。

-(void) onEnter

在CCNode的基础上添加了一个判断,如果支持触摸则执行registerWithTouchDispatcher。

-(void) onEnterTransitionDidFinish

只在父类基础上增加了一个功能,就是当对象支持重力感应的时候,设置自己为UIAccelerometer单例的代理,此时当终端发生晃动时,该对象会被回调,但回调函数- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration并未声明,需要开发者自行扩展。

-(void) onExit

就是在父类的基础上,增加了对CCTouchDispatcher的注销和取消对UIAccelerometer的代理(如果有触摸和重力感应的话)

CCLayerColor

CCLayer的子类,在CCLayer的基础上增加了绘制颜色的功能。

CCLayerColor新增的属性:

GLubyte opacity
GLubyte就是一个无符号的byte,它的取值范围在0到255之间。opacity表示层的透明度,0为全透明,255为不透明。

ccColor3B color_
ccColor3B是个结构体,三个成员r、g、b都是GLubyte类型,分别表示层的红、绿、蓝色值。

ccVerter2F squareVertices_[4]
ccVerter2F其实和CGPoint一样,都是描述坐标点的结构体,squareVertices_是一个长度为4的数组,分别存储对象四个点的坐标(position_和contentSize可以组成一个矩形),作为openGL绘制颜色的参数。

ccColor4F squareColors_[4]
ccColor4F是个结构体,由r、g、b、a四个参数组成(a是透明度,即alpha),但和ccColor3B不同的是,它们都是浮点数,取值范围为0~1(1就相当于GLubyte的255)。squareColors_的作用是充当openGL绘制颜色的参数,因为GL的API需要浮点数,所以ccColor3B不能直接用于绘制,当层的颜色发生变化时,squareColors_会根据color_和opacity自动换算。

ccBlendFunc blendFunc_
ccBlendFunc是一个封装了两个无符号int的结构体,保存的是gl渲染图片的方式,CCLayerColor的渲染方式是固定的,因此对渲染参数的种类不用太过在意,CCLayerColor中用的是GL_SRC_ALPHA和GL_ONE_MINUS_SRC_ALPHA,这种方式融合出的图像亮度不会改变。至于一共有多少种效果,由于参数类型太多,作者也没有一一研究过,总之这丝毫不会影响我们对cocos2d的使用,所以读者也不必太过纠结。

+(id) layerWithColor: (ccColor4B)color width: (GLfloat)w height: (GLfloat)h

创建一个CCLayerColor实例并返回,可以设置颜色和宽高,其实就是封装了alloc、initWithColor和aurorelease方法。

+(id) layerWithColor: (ccColor4B)color

缺省了宽高的创建实例方法,宽高默认和屏幕尺寸相同。

-(id) init

缺省了颜色和宽高的初始化,所有参数默认均为0。

-(id) initWithColor: (ccColor4B)color width: (GLfloat)w height: (GLfloat)h

CCLayerColor标准的初始化,做的工作有:将color的rgb存到color_中,a存到opacity中;将blendFunc_的值置为{GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};将color换算成0~1之间的浮点数并赋给squareColors_;将w和h赋给contentSize_,并换算出squareVertices_的值。

-(id) initWithColor: (ccColor4B)color

缺省了宽高的初始化,宽高默认和屏幕尺寸相同。

-(void) setContentSize: (CGSize)size

除了父类的逻辑外,还将squareVertices_的坐标换算出来。

-(void) changeWidth: (GLfloat)w height: (GLfloat)h

作用和setContentSize一样,设置层的宽高,只是参数的类型换了一下。

-(void) changeWidth: (GLfloat)w

改变层的宽度。

-(void) changeHeight: (GLfloat)h

改变层的高度。

-(void) updateColor

将color_和opacity的值换算成浮点数并赋给squareColors_。

-(void) setColor: (ccColor3B)color

给color_赋值,同时调用updateColor进行换算。

-(void) setOpacity: (GLubyte)o

给opacity赋值,即设置透明度,同时调用updateColor方法。

CCLayerGradient

继承自CCLayerColor,增加了颜色渐变功能,CCLayerColor只能显示一种单一的颜色,而CCLayerGradient可以实现在两个颜色间逐渐过度的效果。因为有两种颜色,因此参数也会相应增加,但功能和CCLayerColor大同小异,就不赘述了,下面说一下方法:

-(void) initWithColor: (ccColor4B)start fadingTo: (ccColor4B)end

初始化方法,比CCLayerColor多了一个参数,因为CCLayerGradient是在两个颜色之间渐变。默认为start在正上,end在正下。

-(void) initWithColor: (ccColor4B)start fadingTo: (ccColor4B)end alongVector: (CGPoint)v

可以自由设置颜色渐变方向的初始化,当v的值为(0, -1)时(上一个方法的缺省值),表示颜色自上至下过度(start -> end),值(0, 1)表示自下至上过度,(1, 0)表示自左至右过度,(-1, 0)表示自右至左过度。1表示颜色自屏幕一侧过度到另一侧才会完全由start变为end,如果是0.5的话,那么到了屏幕中间就会变为end的色值。

-(ccColor3B) startColor

返回对象的color_,即获取起始点的色值。

-(void) setStartColor: (ccColor3B)colors

设置起始点色值。

-(void) setEndColor: (ccColor3B)colors

设置终点色值。

-(void) setStartOpacity: (GLubyte)o

设置起始点透明度。

-(void) setEndOpacity: (GLubyte)o

设置起始点透明度。

-(void) setVector: (CGPoint)v

设置渐变方向。

CCLayerMultiplex

就是一个层的集合,它可以涵盖N个层,但一次只能激活一个。

+(id) layerWithLayers: (CCLayer*)layer, …

创建一个CCLayerMultiplex对象并返回,即封装了alloc、initWithLayers和autorelease方法,参数为组成该对象的层集合。

-(id) initWithLayers: (CCLayer*)layer vaList: (va_list)params

初始化方法,将包含的曾添加到对象的成员队列中,但只有被激活的层(默认为第0个)会用addChild方法加为对象的子节点。

-(void) switchTo: (unsigned int)n

切换当前激活的层,n是索引值,用来在队列中检索待激活的层。

-(void) switchToAndReleaseMe: (unsigned int)n

切换当前激活的层,并将取消激活的层从队列中删除。

CCDirector

导演类也是一个单例,有两大作用,一是设置主窗口的显示属性(比如垂直或水平、是否显示FPS),二是管理、显示场景。

之前提到过,场景是树的根节点,一个游戏可以同时存在多个树,但被激活的只能有一个,导演类的实现方法是:将所有树的根节点(即场景对象)保存在一个堆栈中(array),最后进栈的就是当前激活的场景,当需要切换场景时,导演通过进栈、出栈或替换的方式实现。

常用方法:

+( CCDirector) shared CCDirector

获取单例。

-(void) runWithScene: (CCScene*)scene

将场景对象压入栈中,并激活(此时不能有已经激活的场景,因此该方法常用于刚进游戏时)。

-(void) replaceScene: (CCScene*)scene

替换当前激活的场景,同时将旧场景从堆栈中删除,新场景压入堆栈。

-(void) pushScene: (CCScene*) scene

添加新的场景进栈,并将其激活。

-(void) popScene

当前激活的场景出栈,激活上一个场景。

-(void) pause

暂停。

-(void) resume

恢复。

有了这些知识,我们已经可以写一些小功能了,那么就让我再写个例子,抛砖引玉吧~(下面的项目会用到前几章的知识)

 下载地址

这次我们做两个场景,让导演在它们之间切换,下面是第一个场景

01 -(id) init
02 {
03     if (self = [super init])
04     {
05         //创建一个层,颜色为天蓝色
06         CCLayerColor* layer = [CCLayerColor layerWithColor:ccc4(100, 120, 255, 255)];
07         //以yz.png为资源创建一个精灵
08         CCSprite* sprite = [CCSprite spriteWithFile:@"yz.PNG"];
09         //将精灵和层加到场景中
10         [layer addChild:sprite z:0 tag:1];
11         [self addChild:layer z:0 tag:1];
12         //设置精灵的行为
13         [self setAction:sprite];
14     }
15     return self;
16 }
17  
18 -(void) setAction:(CCSprite*)sprite
19 {
20     //瞬间移动
21     id place = [CCPlace actionWithPosition:CGPointMake(0, 240)];
22     //缓慢右移
23     id move = [CCMoveTo actionWithDuration:10 position:CGPointMake(320, 240)];
24     //等待1秒
25     id delay0 = [CCDelayTime actionWithDuration:1];
26     //左右翻转
27     id flipX = [CCFlipX actionWithFlipX:YES];
28     id delay1 = [CCDelayTime actionWithDuration:1];
29     //上下翻转
30     id flipY = [CCFlipY actionWithFlipY:YES];
31     id delay2 = [CCDelayTime actionWithDuration:1];
32     //旋转180度
33     id rotate = [CCRotateBy actionWithDuration:3 angle:180];
34     //改变色值
35     id tint = [CCTintTo actionWithDuration:2 red:200 green:80 blue:120];
36     id delay3 = [CCDelayTime actionWithDuration:1];
37     //调用setSpriteOpacity函数
38     id alpha = [CCCallFunc actionWithTarget:self selector:@selector(setSpriteOpacity)];
39     //调用changeScene函数
40     id end = [CCCallFunc actionWithTarget:self selector:@selector(changeScene)];
41     id spawn0 = [CCSpawn actions:rotate, tint, nil];
42     id queue0 = [CCSequence actions:delay0, flipX, delay1, flipY, delay2, spawn0, delay3, alpha, nil];
43     id spawn1 = [CCSpawn actions:move, queue0, nil];
44     id queue1 = [CCSequence actions:place, spawn1, end, nil];
45     [sprite runAction:queue1];
46 }
47  
48 -(void) setSpriteOpacity
49 {
50     //将精灵的透明度设为150
51     CCSprite* sprite = (CCSprite*)[[self getChildByTag:1] getChildByTag:1];
52     [sprite setOpacity:150];
53 }
54  
55 -(void) changeScene
56 {
57     //进入MOMO场景,本场景并没有消失,而是暂停行为
58     [[CCDirector sharedDirector] pushScene:[MOMO scene]];
59 }

 

这是第二个场景

01 -(id) init
02 {
03     if (self = [super init])
04     {
05         ccColor4B red = ccc4(255, 0, 0, 255);
06 //    ccColor4B green = ccc4(0, 255, 0, 255);
07         ccColor4B blue = ccc4(0, 0, 255, 255);
08         //创建颜色渐变的层
09         CCLayerGradient* layer = [CCLayerGradient layerWithColor:red fadingTo:blue alongVector:CGPointMake(0, 1)];
10         m_spriteKyo = [CCSprite spriteWithFile:@"kyo.png"];
11         //设置精灵的坐标
12         [m_spriteKyo setPosition:CGPointMake(0, 160)];
13         //设置精灵的锚点
14         [m_spriteKyo setAnchorPoint:CGPointMake(0.5f, 0)];
15         [layer addChild:m_spriteKyo];
16         [self addChild:layer z:0 tag:1];
17         //设置精灵的行为
18         [self setAction];
19         //启动定时任务,调用display函数
20         [self schedule:@selector(display) interval:0.1f];
21     }
22     return self;
23 }
24  
25 -(void) setAction
26 {
27     ccBezierConfig bezier;
28     //设置贝赛尔曲线的轨迹
29     bezier.controlPoint_1 = CGPointMake(80, 100);
30     bezier.controlPoint_2 = CGPointMake(240, 100);
31     bezier.endPosition = CGPointMake(320, 0);
32     //贝塞尔曲线
33     id move = [CCBezierBy actionWithDuration:8 bezier:bezier];
34     //改变透明度
35     id fade0 = [CCFadeTo actionWithDuration:2 opacity:50];
36     id fade1 = [CCFadeTo actionWithDuration:2 opacity:255];
37     //缩放
38     id zoom0 = [CCScaleTo actionWithDuration:1 scale:1.5f];
39     id zoom1 = [CCScaleTo actionWithDuration:1 scale:0.75f];
40     id zoom2 = [CCScaleTo actionWithDuration:1 scale:1];
41     //调用changeScene函数
42     id end = [CCCallFunc actionWithTarget:self selector:@selector(changeScene)];
43     id queue = [CCSequence actions:fade0, fade1, zoom0, zoom1, zoom2, nil];
44     id spawn = [CCSpawn actions:move, queue, nil];
45     [m_spriteKyo runAction:[CCSequence actions:spawn, end, nil]];
46 }
47  
48 -(void) display
49 {
50     //设置是否可见
51     [m_spriteKyo setVisible:![m_spriteKyo visible]];
52 }
53  
54 -(void) changeScene
55 {
56     //返回上一场景
57     [self unschedule:@selector(diplay)];
58     [[CCDirector sharedDirector] popScene];
59 }

 

效果图

7、深入探索 Cocos2d 游戏引擎核心组件 本文深入解析了 Cocos2d 游戏引擎的核心组件,包括其场景图结构、CCNode 类的层次关系及操作方法、节点动作的调度与管理、定时消息的处理,以及导演类(CCDirector)在场景管理中的作用。通过实例和代码演示了如何高效地使用这些功能进行游戏开发,从而提升游戏性能和对象管理能力。 阅读详情

相关推荐

7、Cocos2d游戏引擎基础入门

本博客详细介绍了Cocos2d游戏引擎的基础知识,包括其核心架构、场景图的概念、CCNode类的操作方法、动作与调度的使用,以及CCScene、CCLayer和CCDirector类的作用。通过示例代码和结构化讲解,帮助开发者快速入门并掌握Cocos2d的基本开发技巧,为开发高质量的2D游戏打下坚实基础。

tree8的博客 136

Cocos2D研究院之完整游戏体系的搭建(五)

原创文章如需转载请注明:转载自雨松MOMO程序研究院本文链接地址:Cocos2D研究院之完整游戏体系的搭建(五) 通过对CCNode和CCAction的介绍以及上一章的例子,相信看过前几章的读者已经对cocos2d有了大体的了解(没有的话我只能去面壁了= =。。。),但是之前的代码除了这两个类,还涉及到之前我们没有接触过的一些知识,那么这一次我就针对这些做个补充,完整地讲一下cocos2

1997

7、Cocos2d游戏开发入门与核心知识解析

本文详细介绍了Cocos2d游戏开发的基础知识与核心概念,包括开发前的准备工作、cocos2d引擎的架构组成、CCNode类的使用方法、节点动作与调度消息的处理机制等内容。通过对场景图结构、节点父子关系、动作控制以及更新调度的深入解析,帮助开发者全面掌握cocos2d开发的核心原理和实践技巧,为构建高性能、功能丰富的2D游戏打下坚实基础。

o5p6q的博客 73

我所理解的Cocos2d-x(一) cocos2d-x架构一览

一、引擎系统总览 游戏引擎是为某种使用方式而编写的程序,其使用方式的不同导致各引擎之间的差异,其引擎内系统之间可能交叉在一起。 下面是对一般引擎系统的构成划分,如下图: cocos2d-x使用了些第三方开源库,用于支持文件解压、图片解析、网络支持、视频音频等功能;此外,cocos2d-x封装了些与平台无关的接口,如文件加载、纹理解析、线程操作等。 渲染系统是cocos2d-x的核心部分,包含了场景中元素的层级结构、关系及元素的管理、遍历和绘制等。这一层也是与OpenGL ES交互的部分。 此外

汐客SeaKr的博客 1264

8、Cocos2d开发:CCNode、场景与内存管理详解

本文详细介绍了Cocos2d游戏开发中的核心概念,包括CCNode类的使用、场景管理机制以及内存管理技巧。通过具体代码示例和流程图,帮助开发者深入理解如何高效构建游戏场景,并优化性能与内存使用,适用于不同复杂度的游戏开发需求。

u9v0w的博客 53

5、深入探索 cocos2d 和 Kobold2D 应用开发

本博客详细介绍了使用 cocos2d 和 Kobold2D 进行 iOS 应用开发的全过程,包括项目构建与运行、代码重构为 ARC 模式、项目结构剖析、性能优化要点以及项目配置管理等内容。通过 Hello World 示例项目,深入解析了 AppDelegate 类、main 函数、预编译头文件、节点层次结构等核心概念,并提供了常见问题的解决方案,帮助开发者高效开发高性能的 cocos2d 和 Kobold2D 应用。

o5p6q的博客 48

Cocoa的四种典型结构体以及初始化方式

1.Range{location,length}   一维范围     NSRange a;     a.length=10;     a.location=6;         NSRange range={10,6};         NSRange range1=NSMakeRange(10, 6);   2.Point{x,y}   点     NSPoint po

嘀咕的榔头 1604

8、Cocos2d开发基础:CCNode、场景与内存管理全解析

本文深入解析了Cocos2d开发中的核心内容,包括CCNode类的层次结构、节点操作、动作与定时消息管理、场景与图层的使用,以及内存管理的最佳实践。文章还提供了常见问题的解决方案和未来拓展方向,帮助开发者构建高性能、稳定的游戏应用。

q9w8e7r6t5的博客 50

cocos2dx笔记-02-核心概念

position属性往往还要配合使用anchorPoint属性,为了将一个Node对象(标准矩形图形)精准地放置在屏幕某一个位置上,需要设置该矩形的锚点, anchorPoint是相对于position的比例,默认是(0.5,0.5)C2D-X的树形结构管理: 场景、层,精灵、菜单、文本、地图和粒子系统等节点(Node)对象。在触摸事件发生的时候,会获得一个触摸对象(touch),触摸对象提供了很多获得位置信息的函数。层级结构中的节点可以是场景、层、精灵,菜单、文本、地图和粒子系统等任何对象。

qq_62743629的博客 297

Cocos2dx 类结构图

2.1.3 以前的版本 关于 CocoStudio的 后添加的框架 添加

Cocos2dx 3.0类结构图

那这个做的 xmind cocos2dx3.0版本 所有类 结果图 (有的本人才开了 但大体没有动),互相学习 mac win都可以运行(建议在win上运行 mac上xmind这个软件老蹦)

cocos2dx中Opacity属性及相关操作(1)

Opacity指的是Node的透明度,从0~255之间的一个整数,通过Node的setOpacity来进行设置:

mdifferent的专栏 1万+

Cocos2d 框架图

自己制作的cocos2d 框架 分享下

cocos2D 学习记录 一:CCNode类的层次结构

cocos2D  场景图     场景图  有时也成为场景层次体系,是当前所以活跃cocos2D 节点 的层次关系。 cocos2D 节点都是CCNode类派生出来的对象。CCNode 是所有节点的基类。它是一个没有具体显示的抽象类,仅用于定义所有节点的公共属性和方法。    节点的处理方式   CCNode类实现了添加,获取以及删除子节点的所有方法 创建新节点:

u011534664的专栏 629

initWithCoder与initWithFrame

每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似的initWithNibName/awakeFromNib/initWithCoder放在一起还是非常容易让人混淆的. 昨天看了下苹果官方的相关文档以及几篇相关内容的网页(一 二 三),其实这个内容以前也看过,似乎也搞清楚了,可还是忘了.好急性不如烂笔头,这次一定要好好记下来. 大前提是UIViewController有一个UIView.同时,需要厘清两个概念,创建一个类和实例化一个类.在XCode中创建一个类和实例化一个类很容易区分,但是在IB(Interface Builder)中有时候就会迷糊.其实也很好区分,孤零零地创建了一个nib文件,没有和其他可被实例化的类有直接或间接关系的时候,这个类或这些类(一个nib文件俺也可能包含多个类)是没有机会被实例化的,所以这种情况只是通过ib创建了一个类,而没有实例化.真正的实例化还需要通过在Xcode用代码来读取这个nib文件.知道这两这的区别后这些方法也就容易辨认多了,viewDidLoad其实没什么可混淆的,无论通过什么途径加载(Xcode或者IB,这里的加载属于实例化)完view后肯定会执行这个方法. loadView需要分两种情况.当你通过Xcode实例化一个类的时候就需要自己在controller中实现这个方法.而在IB中实例化就不需要实现它. initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的. awakeFromNib这个方法是一个类在IB中被实例化是被调用的.看了帖子发现大家都推荐使用viewDidLoad而不要使用awakeFromNib,应为viewDidLoad会被多次调用,而awakeFromNib只会当从nib文件中unarchive的时候才会被调用一次.实际测试中发现,当一个类的awakeFromNib被调用的时候,那么这个类的viewDidLoad就不会被调用了,这个感觉很奇怪. initWithCoder是一个类在IB中创建但在xocdde中被实例化时被调用的.比如,通过IB创建一个controller的nib文件,然后在xocde中通过initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用. 如果你的对象是UIViewControler的子类,那么你必须调用- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil;方法去调用NIB文件初始化自身,即使那没有使用nib文件也会调用这个函数(默认情况下init方法已经为你的做这件事情了),如果你调用这个方法,并传递的两个参数为空(nil),然后类会调用-loadView去读取一个名字和你的UIViewController名字相同的nib文件,来初始化自身。如果没有这样的nib文件,你必须调用-setView:来设置一个self.view。或者重载-loadView 方法。

在VS2019里把JSBSim飞行模型集成到你的C++项目里(附完整配置流程和常见错误解决)

本文详细介绍了如何在Visual Studio 2019中将JSBSim飞行模型集成到C++项目中,包括环境准备、源码编译、项目配置和常见错误解决方案。通过实战技巧和优化建议,帮助开发者高效实现高精度飞行仿真功能,提升开发效率。

weixin_42620202的博客 413

Cocos2d开发系列(七)

Learn IPhoneand iPad Cocos2d Game Delevopment》第8章 。这种类型的游戏(shoot’emup游戏)最重要的是什么?射击的目标和需要躲避的子弹。本章,将为游戏添加一些敌人以及一个大 boss。敌人和玩家将使用新的Bu

kmyhy的专栏 9323

SAP 批次管理

批次管理: 业务场景: 批次常用于:采购、生产、SD等: 1、先进先出,先入库的先出库(如何实现),基于入库时间来自动确定出库策略。 2、追塑:基于批次进行产品质量追溯 例如订单MTO ---> PP ----> MM(批次关联)。SO—>PP工单 --> 预留 --> 发料(基于批次A\B\C)-->产成品入库-->批次入库D--> ...

willieyuan的博客 1万+

cocos2d-x: 死磕"HelloWorld"(4)——HelloWorld场景的创建

万众瞩目的HelloWorld场景会在该篇中现身。

操练起来。。。 905

【AI Agent】Harness Engineering实践

Harness(运行宿主)是围绕 LLM构建的一套确定性工程系统,其核心职责是:承认模型的固有局限,用可控的工程手段逐一弥补,使"强大但不可靠的推理引擎"变成"可信赖的生产级Agent"模型 是发动机——提供原始动力Agent 是驾驶员——做出决策Harness 是道路、地图、护栏、仪表盘、维修站和质检线——确保行驶安全有序没有Harness,模型越强,可能只是更快地制造混乱。

sysu_lluozh 190

Claude Code 任务编排 头脑风暴与 疯狂拷问:Superpowers vs Grill-me 硬核对比与工程落地

Superpowers和Grill-me是AI编程中的互补工具:Superpowers提供工程化开发流程(从需求梳理到代码审查),确保规范执行;Grill-me通过持续追问帮助厘清需求,避免方向偏差。两者结合形成"构思-拷问-执行"工作流,前者负责方案生成与落地,后者专注需求审查。根据场景选择:个人项目可用Grill-me快速澄清需求,企业项目推荐Superpowers全流程,复杂开发则建议组合使用。它们分别解决"如何落地"和"是否对齐"的问题,共

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 322
上一篇: cocos2d_CCAction
下一篇: cocos2d_CCSprite
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值