① cocos2dx场景黑边我使用的Sprite作为Layer的背景,我设置sprite的位置为Layer的中心点,
Size VisibleSize = Director::getInstance()->getVisibleSize();
Vec2 VisibleOrigin = Director::getInstance()->getVisibleOrigin();
//BackGround 1
_BackGround_1 = Sprite::create("background.jpg");
float ScaleTimes = VisibleSize.height / _BackGround_1->getContentSize().height;//计算缩放倍数
_BackGround_1->setScale(ScaleTimes);
② 如何使用cocos2d
cocos2d是一个非常强大的开源库,它可以为你开发iphone上面的游戏节省大量的时间。目前支持精灵(sprite)、动画、物理引擎、声音引擎以及许许多多非常酷的图像效果等等。
我也是刚开始学习cocos2d,目前已经有许多非常好的教程来教你如何使用cocos2d了。但是,那些都不是我想要的。我真正想要的是一个非常简单,但是可以跑起来的游戏。这个游戏包括怎么使用动画、碰撞检测和播放声音,这就够了,并不需要使用太多高级的特性。最终,我自己做了一个这样的游戏,因此,基于我的一些经验写了这篇教程,希望会对初学者有所帮助。
这篇教程将会从头至尾、一步一步地教你如何使用cocos2d来制作一个简单的iphone游戏。你可以按照教程一步步来,或者干脆直接跳到文章的最后,下载样例程序。没错!游戏里面有忍者。
下载并安装cocos2d
你可以从下面的链接来下载cocos2d的最新版本(以前是google,现在采用git了) the Cocos2D Google Code page.
在你下载完代码以后,你可能想安装非常有用的项目模板。打开终端窗口,然后cd到你的cocos2d解压缩目录下面,输入./install_template.sh
请注意,你可以传递一些参数给这个安装脚本,比如你把xcode安装在了一个非标准的目录下面。(或者你有多个版本的sdk安装在你的机器上面)
Hello, Cocos2D!
让我们从最简单的HelloWorld项目开始吧!启动xcode,点file->new project,然后选择cocos2dApplicationtemplate来创建一个新的cocos2d项目并把它命名为“Cocos2dSimpleGame”
继续,点编译并运行这个工程模板,如何一切都ok的话,那么你会看到下面的内容:
cocos2d是按照“场景”(scene)的概念组织的,对一个游戏来说,就好像某个关卡或者屏幕之类的。比如,你可能需要一个场景来为你的游戏建立初使化菜单界面,另外一个场景当作玩游戏的主要界面,还有一个游戏结束的时候的界面。在一个场景里面,你可以有许多“层”(layer)(这个和photoshop有点类似)。每一个层又可以包含一些结点,比如精灵、标签、菜单等。而且一个结点也可以包含其它的结点。(比如,一个精灵可以包含一个子精灵)
如果你看一下样例工程,你会看到只有一个场景HelloWorldScene--我们接下来将会在这个场景里面实现我们的游戏逻辑。继续打开它,你会在init方法里面看到,它把一个带有“HelloWorld”字样的标签加到了当前场景中。我们将把这些代码去掉,并且放一个精灵在上面。
增加一个精灵
在我们增加一个精灵之前,我们需要一些图片。你可以自己去创建一些,或者使用我可爱的妻子为这个项目所创建的图片: a Player image, a Projectile image, and a Target image.
一旦你获得了这些图片,你就可以把它们用鼠标拖到xcode的resource文件夹中去,并且保证“ Copy items into destination group’s folder (if needed)”勾上了。现在,我们拥有自己的图片了,我们先得计算一下,应该把player放在哪里。请注意,cocos2d坐标系的原点在屏幕的左下角,即(0,0)位置在左下角,这与一般的窗口坐标系统在左上角有所区别。x方向往右是正,y方向往上是正。由于项目是landscape(横版)模式,这就意味着右上角的坐标是(480,320)。
还有需要注意的是,当我们设置一个对象的位置的时候,这个位置是相对于所加精灵的中心点来加的。因此,如果我们想让我们的player精灵与屏幕的左边界水平对齐,并且垂直居中的话。
那么对于x轴:我们需要设置为[player sprite's width]/2。y坐标设置为[window height]/2。
下面有一张图,可以更加清楚一些:
好,让他开始射击吧!打开Class文件夹并点击HelloWorldScene.m,然后把init方法用下面的代码替换掉:
复制代码
-(id) init
{
if( (self=[super init] )) {
CGSize winSize = [[CCDirector sharedDirector] winSize];
CCSprite *player = [CCSp www.hbbz08.com rite spriteWithFile:@"Player.png"
rect:CGRectMake(0, 0, 27, 40)];
player.position = ccp(player.contentSize.width/2, winSize.height/2);
[self addChild:player];
}
return self;
}
复制代码
编译并运行,你的精灵这时候应该出现在正确的位置上了。但是,这个前景默认是黑的。对于这张忍者图片来说,白色的背景可能看起来更好一些。在cocos2d里面,有一种非常简单的方式来改变层的背景颜色,那就是使用CCColoredLayer类。好,跟我来吧!点击HelloWorldScene.h,然后把HelloWorld接口声明改成下面这样:
@interface HelloWorld : CCColorLayer
然后点击HelloWorldScene.m文件,在init方法里面做一些小小的修改,以便使我们能把层的背景颜色改成白的:
③ cocos2d-x怎么实现更换背景图
首先背景图片要是上下能连接在一起,不能有太明显的差异感。 两个Sprite全放背景图片,一个描点0,0 一个描点0,1 position 都设置0,0 然后做个update 里面对两张图片进行setPositionY(getPositionY + 1) 想速度快 增加的数就大点
④ cocos2d-x 3.0 怎么设置android的自适应屏幕
虽然 cocos2d-x自带了三种模式来适应屏幕,但还是存在一些问题,会产生黑边,所以还是需要多套资源来适应屏幕。
这里我选择了四种分辨率9:16 3:5 2:3 3:4,在resource资源目录下新建了四个文件夹放置多套背景图片,在AppDelegate中添加如下函数调用即可。
⑤ 怎样设置cocos2dx背景透明
方法/步骤
1
废话不多说,先放图。
2
就如果你想让你的activity透明,很简单,只需要4步。1. 打开AndroidManifest.xml文件,添加Translucent到
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
3
2.打开Cocos2dxActivity.java文件,添加
getWindow().setFormat(PixelFormat.TRANSLUCENT);
4
3.打开cocos2d/cocos/2d/CCDirector.cpp文件,找到setGLDefaultValues()函数,修改最后一个alpha值,范围从0.0f到1.0f。
5
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
6
4.打开cocos2d/cocos/2d/platform/android/nativeactivity.cpp,找到engine_init_display(struct engine* engine)函数,修改如下数组
7
从
const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_BLUE_SIZE, 5,
EGL_GREEN_SIZE, 6,
EGL_RED_SIZE, 5,
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};
到
const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
//EGL_BLUE_SIZE, 5, -->delete
//EGL_GREEN_SIZE, 6, -->delete
//EGL_RED_SIZE, 5, -->delete
EGL_BUFFER_SIZE, 32, //-->new field
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};
⑥ cocos2d-x中怎样设置循环滚动背景为上下循环
首先背景图片要是上下能连接在一起,不能有太明显的差异感。
两个Sprite全放背景图片,一个描点0,0 一个描点0,1 position 都设置0,0
然后做个update 里面对两张图片进行setPositionY(getPositionY + 1) 想速度快 增加的数就大点
⑦ cocos2d加载程序时的那个背景图片如何添加,那个背景图片在给定的plist文件里
cocos2d加载程序时的那个文件是一个命名为Default.png的图片,你可以命名一个同名图片去覆盖它。
通常游戏的开始画面可能不仅仅是一张图片,加载了。
我不记得是cocos2d哪个版本了,在AppDelegate文件里有一个removeStartupFlicker方法,里面注释着以下内容
- (void) removeStartupFlicker
{
//
// THIS CODE REMOVES THE STARTUP FLICKER
//
// Uncomment the following code if you Application only supports landscape mode
//
#if GAME_AUTOROTATION ==
//CC_ENABLE_DEFAULT_GL_STATES();
//CCDirector *director = [CCDirector sharedDirector];
//CGSize size = [director winSize];
//CCSprite *sprite = [CCSprite spriteWithFile:@"Default.png"];
//sprite.position = ccp(size.width/2, size.height/2);
//sprite.rotation = -90;
//[sprite visit];
//[[director openGLView] swapBuffers];
//CC_ENABLE_DEFAULT_GL_STATES();
#endif // GAME_AUTOROTATION ==
}
把CCSprite *sprite = [CCSprite spriteWithFile:@"Default.png"];
在这里你可以取你plist里的那个图片路径来显示它
当然,通常的做法是自己创建一个初始画面的类,不去显示Default.png,自己在类里面做这个初始画面,是淡入淡出也好,甚至播动画也好,都可以自己把控。要记得把初始场景设为它。
⑧ cocos2d怎么使用texture素材
我使用张图片给我历图片添加边框种带波纹效边框四边形张图片透明部遮罩效部白色区域则历图片显示区域
实现效我使用OpenGL混合模式
看《何使用CCRenderTexture态创建纹理》篇教程我讨论OpenGL混合模式我提非便线工具用见化调节混合模式效
完我想要效我需要采取面策略:
我首先渲染mask精灵src color(mask精灵)设置GL_ONE并且destination
color(空buffer)设置GL_ZERO所效简单mask图片显示
接我渲染历图片精灵src
color(历)设置GL_DST_ALPHA意思看看mask图片前alpha值少0(完全透明)显示mask1(完全透明)显示历图片(译者注:家明白参考链接)dst
color(the mask)设计GL_ZERO前渲染mask消失
酷吧能觉我需要先mask精灵渲染再渲染历精灵并且指定两精灵blendFunc行实际行通
面所提混合算精灵面些精灵渲染候问题---比背景图片面精灵作假设面做完1步骤imgae
buffer面存唯张图片mask(假设确啦要切换历图片)
我需要种式建立干净黑板执行12步制作遮罩纹理幸运用RenderTexture非便
Masking
and CCRenderTexture]
RenderTexture类让屏幕外buffer面渲染
用起非便主要原---使用给游戏截屏高效缓存用户渲染内容运行态创建sprite
sheet或者像本教程制作mask sprite
使用RenderTexture需要采取4步:
创建RenderTexture类像素单位指定想要绘制纹理宽度高度
调用RenderTexturebegin初始化渲染操作
调用OpenGL函数绘制实际内容--些OpenGL调用终都绘制屏幕外影响游戏现渲染图像
调用RenderTextureend结束绘制操作旦完RenderTexturesprite属性用Sprite用
要觉第3步奇怪---使用Cocos2d90%情况需要手直接调用OpenGL函数想渲染节点直接调用某节点visitsprite->visit函数自发射些OpenGL函数指针给图形硬件显示
点需要注意坐标问题(00)点渲染纹理左角位置所使用RenderTexture候定要坐标设置
能听些烦程序员喜欢看代码让我始coding吧
给精灵添加遮罩: 终实现
打HelloWorldScene.minit面添加面注意静态文件声明需要注意:
//a static method
Sprite* HelloWorld::maskedSpriteWithSprite(Sprite* textureSprite, Sprite* maskSprite)
{
// 1
RenderTexture * rt = RenderTexture::create( maskSprite->getContentSize().width,
maskSprite->getContentSize().height );
// 2
maskSprite->setPosition(maskSprite->getContentSize().width/2,
maskSprite->getContentSize().height/2);
textureSprite->setPosition(textureSprite->getContentSize().width/2,
textureSprite->getContentSize().height/2);
// 3
maskSprite->setBlendFunc( BlendFunc{GL_ONE, GL_ZERO} );
textureSprite->setBlendFunc( BlendFunc{GL_DST_ALPHA, GL_ZERO} );
// 4
rt->begin();
maskSprite->visit();
textureSprite->visit();
rt->end();
// 5
Sprite *retval = Sprite::createWithTexture(rt->getSprite()->getTexture());
retval->setFlippedY(true);
return retval;
}
让我步步解面操作:
使用mask精灵创建CCRenderTexture
重新设置mask精灵texture精灵位置使左角(00)
按照我前讨论设置每精灵blendFunc
调用CCRenderTexturebegin始渲染操作依渲染masktexture精灵调用end
基于CCRenderTexturesprite属性texture创建新精灵同翻转y纹理创建倒
接我使用面函数制作遮罩效:
//cal->setPosition(visibleSize.width/2, visibleSize.height/2);
Sprite * mask = Sprite::create("CalendarMask.png");
Sprite * maskedCal = maskedSpriteWithSprite(cal, mask);
maskedCal->setPosition(visibleSize.width/2, visibleSize.height/2);
//pRet->addChild(cal);
pRet->addChild(maskedCal);
编译并运行
⑨ 开发iphone的游戏时,怎么把游戏背景设置自己想要的图片求代码参考
lz用什么引擎的?cocos2d?如果是的话就是加载一幅与游戏区域等大小的图片即可 。
那更简单了,别用导航栏,同时隐藏状态栏,弄一个imageView弄的和游戏场景一样大,加载一个图片放到最底层就好了
回复 zhuxurong123:这个就要用到touchesmoved(好像叫这个,你看看api)。通过这个方法的参数可以获得手指在屏幕上的位置,每次手指移动都会调用这个方法。在这个方法里记录下每次手指的位置然后对你想要移动的uiview或其子类创建一个移动动画(在动画开始前记得停止本view的所有动画,否则移动路径就乱了),这样做可以做出view跟随手指移动的效果,或者更简单一点,通过手指位置坐标点直接设置view坐标,也可以达到view随手指移动的效果
#pragma mark - Finger Move View
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSArray *pointArray = [touches allObjects];
UITouch *touch = [pointArray objectAtIndex:0];
CGPoint pointInView = [touch locationInView:self.view];
self.curView.center = pointInView;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSArray *pointArray = [touches allObjects];
UITouch *touch = [pointArray objectAtIndex:0];
CGPoint pointInView = [touch locationInView:self.view];
self.curView.center = pointInView;
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, 60.f, 60.f)];
newView.backgroundColor = [UIColor orangeColor];
self.curView = newView;
[self.view addSubview:newView];
newView = nil;
}
⑩ 如何使用 Cocos Studio 场景编辑器制作《魔卡幻想》主界面
内容列表
1 cocostudio 场景编辑器
2 使用 cocostudio 完成《魔卡幻想》场景编辑
2.1 UI 编辑器制作游戏主界面
2.2 建立关键帧动画
2.3 场景编辑器的 资源“整合”
3 在 cocos2d-x 中加载场景资源 并运行之
3.1 加载场景内容
3.2 在场景中播放动画
3.3 对场景的一些编码说明
1.cocostudio 场景编辑器
前面的文章 《使用 cocostudio 创建 cocos2d-x 序列帧和骨骼动画》《如何使用 cocostudio UI 编辑器实现《乱斗堂》设置界面》,其中介绍了如何使用动画编辑器创建动画与使用 UI 编辑器创建游戏配置界面,而本文将集两者之大成,使用 cocostudio 场景编辑器来创建游戏场景,其中包含游戏 UI 与动画,来定制一个游戏主界面。
2.使用 cocostudio 完成《魔卡幻想》场景编辑
对于环境的搭建使用,请参考之前的文章,或者实时关注 官方 最新版本的安装使用方法。
2.1 UI 编辑器制作游戏主界面
a.创建项目(项目名称:MysticalCard),并导入项目 UI 资源,添加 一图片框设定背景图片。注意在工具拦设置 “画布” 的大小(如果需要),这将决定着你的设计分辨率,在运行时还需要注意屏幕的适配问题,如放大缩小,位置偏移等,视具体情况而定。
b.为界面添加 UI 元素,图片框等,请根据自己的需要定制.
c.实践过程中的注意事项
添加控件时注意必要的属性设置
控件的命名规范,这有助于我们今后在后台编写代码获取界面元素
可交互的控件的 “可交互属性” 开启
2.2 建立关键帧动画
除了主界面一些必要的 UI 控件,我们还需要一个 “对话框指示” 的动画效果。这是一个帧动画。
a.准备工作。
打开 CocoStudio ,启动 动画编辑器
创建一个新的项目,后导入资源(在 “资源窗口” 中,点击 “文件” 或者 “文件夹” 标示,添加需要的素材资源)
在 “资源窗口中” 点击关键帧动画的守帧图片,拖动至 “渲染窗口”
如下图所示:
b.将第一关键帧拖动至 “渲染窗口” 中心。 可以使用工具栏,快速定位至窗口中心,使图片显示在正中间,可以让动画更好的定位。
c.添加其它帧图片,注意,我们需要选中剩余图片,然后 “拖动” 到 “对象结构” 视图中的 “第一关键帧” 所在的对象,如下图所示。
关键帧 与 骨骼动画操作区别:在使用骨骼动画的时候,我们将骨骼中的各部分元素,直接拖动添加到 “渲染窗口”,以摆放各骨骼的位置关系,而在 “对象结构” 视图中则表现为,一个列表,标示着每一e.块骨骼对象,不同帧所改变的是各个骨骼对象的位置,以达到骨骼动画效果。
而在关键帧动画中,它的对象结构只有一个,而在每一帧修改的不是其位置,而是其显示内容。这是两者之间的区别,那操作方式也有所不同。而对于它们所导出的 资源 则是相同,用法也是同样。
d.剩余帧添加之后,我们看见在 “关键帧” 视图中,已经有了多帧动画,可以播放动画,查看效果,并可以通过修改 “速率” 来控制动画的播放速度。
导出动画资源,导出的资源文件可以被我们在 Cocos2d-x 中以代码的方式直接加载,然后播放其动画,也可以作为 场景编辑器中的一个元素,被添加在场景编辑器里,后面的内容就是使用 场景编辑器来加载一个动画的方式。
2.3 场景编辑器的 资源“整合”
使用 CocoStudio 可以很好的帮助游戏开发过程中 分工合作。动画编辑器 和 UI 编辑器可以由多个人进行编辑,最后再由一个人统合资源,这也就是场景编辑器的优点了,它除了能支持 CocoStudio 本身所自带的动画编辑器,UI 编辑器,它还能支持,Tmx 地图资源,粒子编辑器的粒子效果资源,声音资源等~并且不断扩展中。
以下将给出如何在 场景编辑器整合我们之前所创建的动画与 UI 界面的资源,来实现我们一个场景的运行效果。它的步骤如下:
a.启动场景编辑器,新建一个场景项目。并设置 “画布” 大小。画布大小要适量。
b.我们拖动一个 UI 控件到画布之上,它作为我们之前导出的 UI 资源的承载。
c.我们将之前的 UI 编辑器所导出的资源,导入到当前场景项目中来,导入方式与 UI 编辑器导入资源方式同样,如下图:.
d.为 UI 控件的 “文件” 属性赋值:我们在资源视图中找到 UI 编辑器所导出的 UI 资源,其目录下包含 json 文件资源(如这里的 “MysticalCard_1.json”),将其拖动到 UI 控件的文件 属性中去,如下图所示:
e.前面的步骤已经将 UI 资源导入场景之内,现在需要添加之前所创建的动画资源。
我们以相同的方式导入动画编辑器所导出的动画资源文件。
拖动一个骨骼控件至场景界面,如下图所示。
为骨骼控件的 “文件” 属性赋值,其值为 动画资源中的 ExportJson(或者 json 文件,这取决于动画资源的导出方式) 文件。
f.运行效果:当我们建立好场景之后,可以通过工具栏运行按钮,点击查看效果,这意味着你不用将所有的资源文件,手动以代码的方式添加到 Cocos2d-x 中,便能看到效果。
在运行效果中,所有的控件都是可操作的,如下图,但这里只有点击效果,如果需要实现其逻辑,那么现在需要将其加载到 Cocos2d-x 项目中,编写后台代码实现。
3.在 Cocos2d-x 中加载场景资源 并运行之
3.1 加载场景内容
前面那么多步骤,使用 CocoStudio 来创建了 UI,动画,还有一个场景,而要将其运行在实际的项目中,就非常的简单与方便了,只需几行代码,就能够将其加载到项目中去,当然在这之前我们需要将场景编辑器的资源(场景项目目录中 “Resources” 目录,其中将包含一个 json 文件)复制到项目资源目录中去:
// 加载场景资源
CCNode *pNode = CCJsonReader::sharedJsonReader()->createNodeWithJsonFile(“McScene.json”);
this->addChild(pNode);
通过 CCJsonReader 来读取解析 json,从而获得场景中的节点内容,直接添加到当前的场景就能运行。
3.2 在场景中播放动画
默认加载的场景资源 动画 组件是没有播放的,需要手动获取动画组件对象,然后调用其播放方法,当然这个步骤也是非常简单的:
// pNode 为 之前所获取的场景资源根节点,通过此节点获取到动画对象,获取方式根据在场景编辑其中设置的层次关系而定
CCComRender *pLoadRender = (CCComRender*)(pNode->getChildByTag(1)->getChildByTag(1)->getComponent(“CCArmature”));
CCArmature* armLoad = (CCArmature*)(pLoadRender->getRender());
armLoad->getAnimation()->playByIndex(0);
3.3 对场景的一些编码说明
使用 CocoStudio 就是为了帮助我们快速的建立 UI 原型,然后通过编码可以获取到里面的任意一个元素对象,并修改其属性值,调用其方法,正如上面所示播放一个动画的方法同样。其步骤如下:
通过 CCJsonReader 类读取 json 文件,将会自动解析构建对象,返回一个节点 CCNode
任何元素都能通过这个 CCNode 节点,获取到,它其实就是一个树,所不同的是层级关系(树节点的位置)
找到需要对象所在的 “树枝”,后通过 getComponent 方法获取 所在的 CCComRender 对象
通过 CCComRender 的 getRender 方法获取最终对象
得到我们所需要的具体对象之后,我们就能够对齐进行草,设置属性,调用方法等,诸如此类
转载,仅供参考,祝你愉快,满意请采纳。