Cocos2d-x 基础元素

看过本章,然后实践之后,应该会掌握以下的认识:

1、Cocos2d-x引擎的基本运转过程

2、Cocos2d-x引擎的一些初始设置

3、对导演及图层及现实对象的认识

4、如何定义自己的显示对象

1.引擎的运转

游戏设计的问题: 在游戏设计之初,我们就需要设置游戏是横屏的还是竖屏的。 展示图像的清晰度是多少? 帧数? 适配哪些屏幕?

在处理以上问题之前,我们需要了解引擎的运转是怎么样的? (以后补充)

关于XCode设置游戏屏幕竖屏的方式:


2.显示对象

每一个节点对象都继承一个node节点对象。包含了设置节点对象的位置,旋转角度,缩放,锚点以及管理子对象的功能。

导演Director是单例类,是cocos2d的引擎的核心
Scene的切换由导演来处理。
在Cocos2d工程中的Resources文件夹下是放置图片、字体等资源的地方。

场景:scene,包含多个层
层:layer,包含多个精灵
精灵:Sprite

先删除掉官方的部分代码,保留下面的部分

bool HelloWorld::init()
{
 //////////////////////////////
 // 1. super init first
 if ( !Layer::init() )
 {
 return false;
 }
 Size visibleSize = Director::getInstance()->getVisibleSize();
 Vec2 origin = Director::getInstance()->getVisibleOrigin();

 return true;
}

然后把,需要的图片文件拷贝进工程中的Resources文件夹里

bool HelloWorld::init()
{
 //////////////////////////////
 // 1. super init first
 if ( !Layer::init() )
 {
 return false;
 }

 Size visibleSize = Director::getInstance()->getVisibleSize();
 Vec2 origin = Director::getInstance()->getVisibleOrigin();

 //1、创建一个精灵对象,并且绑定到资源图片文件
 auto logo = Sprite::create("logo.png");
 //2、设置精灵的大致位置
 logo->setPosition(visibleSize/2);
 //3、添加到场景中
 addChild(logo);

 return true;
}

其实我们不这么添加显示图片精灵,我们可以这样:

bool HelloWorld::init()
{
 //////////////////////////////
 // 1. super init first
 if ( !Layer::init() )
 {
 return false;
 }

 Size visibleSize = Director::getInstance()->getVisibleSize();
 Vec2 origin = Director::getInstance()->getVisibleOrigin();

 //1、先通过导演类获取纹理对象,然后通过纹理对象的添加图片方法
 auto img = Director::getInstance()->getTextureCache()->addImage("logo2.png");
 //2、获取纹理图片的尺寸
 auto logoSize = img->getContentSize();
 CCLOG("logo size:%f %f",logoSize.width,logoSize.height);
 //3、通过精灵类的加载纹理的方法创建精灵对象
 auto logo = Sprite::createWithTexture(img);
 logo->setPosition(visibleSize/2);
 //4、添加到场景中
 addChild(logo);

 return true;
}

下面通过layer图层对象调用添加加载好的三张图片

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
 //////////////////////////////
 // 1. super init first
 if ( !Layer::init() )
 {
 return false;
 }

 Size visibleSize = Director::getInstance()->getVisibleSize();
 Vec2 origin = Director::getInstance()->getVisibleOrigin();

 auto layer1 = Layer::create();
 auto layer2 = Layer::create();
 auto layer3 = Layer::create();

 auto img1 = Sprite::create("layer1.png");
 auto img2 = Sprite::create("layer2.png");
 auto img3 = Sprite::create("layer3.png");
 img1->setAnchorPoint(Vec2(0, 0));
 img2->setAnchorPoint(Vec2(0, 0));
 img3->setAnchorPoint(Vec2(0, 0));

 layer1->addChild(img1);
 layer2->addChild(img2);
 layer3->addChild(img3);
 addChild(layer1);
 addChild(layer2);
 addChild(layer3);

 layer1->setPosition(Vec2(0, 20));
 layer2->setPosition(Vec2(50, 60));
 layer3->setPosition(Vec2(100, 100));

 return true;
}

这里有一个问题:6s的苹果手机可能坐标系统变化了。 最后我们通过一种方式切换场景:

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
 //////////////////////////////
 // 1. super init first
 if ( !Layer::init() )
 {
 return false;
 }

 Size visibleSize = Director::getInstance()->getVisibleSize();
 Vec2 origin = Director::getInstance()->getVisibleOrigin();

 auto layer1 = Layer::create();
 auto layer2 = Layer::create();
 auto layer3 = Layer::create();

 auto img1 = Sprite::create("layer1.png");
 auto img2 = Sprite::create("layer2.png");
 auto img3 = Sprite::create("layer3.png");
 img1->setAnchorPoint(Vec2(0, 0));
 img2->setAnchorPoint(Vec2(0, 0));
 img3->setAnchorPoint(Vec2(0, 0));

 layer1->addChild(img1);
 layer2->addChild(img2);
 layer3->addChild(img3);
 addChild(layer1);
 addChild(layer2);
 addChild(layer3);

 layer1->setPosition(Vec2(0, 20));
 layer2->setPosition(Vec2(50, 60));
 layer3->setPosition(Vec2(100, 100));

 //需要计时器时间表切换layer
 schedule([visibleSize,this](float f){
 auto scene2 = Scene::create();
 auto scene2Layer=Layer::create();
 scene2->addChild(scene2Layer);

 auto logo= Sprite::create("logo2.png");
 logo->setPosition(visibleSize/2);
 scene2Layer->addChild(logo);

 Director::getInstance()->replaceScene(scene2);
 }, 3, "test");

 return true;
}

3.自定义显示对象

首先定义一个继承于Node的最基本的显示对象。 首先创建一个C++ File 的C++类,取名LogoNode,然后就有了LogoNode.h和LogoNode.cpp文件,因为需要使用cocos引擎,所以要在h文件中导入 include “cocos2d.h”,并且要导入它的命名空间,直接另一行写:USINGNSCC,


然后在LogoNode.cpp中完成头文件中public声明的方法

 #include "LogoNode.hpp"

// 1、构造函数主要目的是对刚刚两个成员变量进行初始化
LogoNode::LogoNode():_logo(nullptr),_cocoslogo(nullptr)
{

}
// 2、虚函数的析构函数则没有实现
LogoNode::~LogoNode(){

}

// 3、然后需要一个虚构函数的并且返回的是bool值得初始化函数
bool LogoNode::init(){
// 4、如果创建失败了,就停止创建
 if (!Node::init()) {
 return false
 }
// 5、创建Logo
 _logo = Sprite::create("logo.png");
 _cocoslogl = Sprite::create("logo2.png");

// 6、添加到显示列表,也就是当前的node中
 addChild(_logo);
 addChild(_cocoslogl);

 _cocoslogl->setVisible(false);

// 添加一个计时器
 schedule([this](float f){
 _logo->setVisible(!_logo->isVisible());
 _cocoslogl->setVisible(!_logo->isVisible());
 }, 1, "test");

 return true;
}

然后新建一个场景类,GameScene.hpp和GameScene.cpp文件,

GameScene.hpp代码如下:
 #ifndef GameScene_hpp
 #define GameScene_hpp

 #include <stdio.h>
 #include "cocos2d.h"

USING_NS_CC;

class GameScene:public Layer{
public:
 GameScene();
 virtual ~GameScene();
 virtual bool init();
 CREATE_FUNC(GameScene);
 static Scene* createScene();
};

 #endif /* GameScene_hpp */
 

GameScene.cpp代码如下:


 #include "GameScene.hpp"
 #include "LogoNode.hpp"
GameScene::GameScene()
{

}
GameScene::~GameScene()
{

}
bool GameScene::init()
{
 if (!Layer::init()) {
 return false;
 }
 auto logo = LogoNode::create();
 addChild(logo);

 //将logo设置在居中的位置
 logo->setPosition(Director::getInstance()->getVisibleSize()/2);

 return true;
}
Scene* GameScene::createScene()
{
 //创建一个空的场景
 auto scene = Scene::create();
 auto layer = GameScene::create();

 scene->addChild(layer);

 return scene;
}

最后我们回到AppDelegate.cpp文件中: 首先添加

#include "GameScene.hpp"

然后将后面之前的

// create a scene. it's an autorelease object
auto scene = HelloWorld::createScene();

改为

auto scene = GameScene::createScene();
时间: 2024-10-24 11:38:44

Cocos2d-x 基础元素的相关文章

《Cocos2D权威指南》——3.1 Cocos2D节点基础知识

3.1 Cocos2D节点基础知识 在Cocos2D中,CCNode.CCScene和CCLayer这些类是没有视觉呈现的,但它们之间存在一个层级关系.3.1.1 节点层级图 节点层级图是由所有目前活跃的Cocos2D节点组成的一个层级图,又叫场景继承关系图.除了场景本身,每一个节点只有一个父节点,但是可以有任意数量的子节点. 将节点添加到其他节点中时,就在构建节点场景图.图3-1描绘了一个虚拟的游戏场景图,在顶层是一个场景(CCScene)节点,接下来是层(CCLayer)节点. CCLaye

《Ansible权威指南 》一第2章 Ansible基础元素介绍

第2章 Ansible基础元素介绍 第1章介绍了Ansible的功能作用.通信发展史.基础的安装部署及处理Ansible安装问题所需的Python多环境管理工具Pyenv和Virutalenv.在前期基本工作准备妥当的基础上,本章进一步深入学习Ansible的基础元素,会相继接触Ansible目录结构简介.Ansible系列命令.Ansible Inventory配置规范.Ansible模式匹配规则等,其中部分内容,诸如Inventory.Ansible-playbook等在后续涉及章节会更深入

手机网页设计原则:移动网页中的基础元素

文章描述:移动网页设计应该包含的5个基本元素. 大部分人都认为手机网页设计与电脑网页设计有很大不同,其实不是,手机网页除了小且可以触摸外,很多设计原则与电脑网页设计是共通的.这里有 5 个基本的元素,希望对设计师有所帮助. 1. 有意义的导航 在移动设备上获取信息实际上是有趣的体验,因此,令用户在使用过程中感到愉快很有必要,简单地删除屏幕上的链接(或taps)并不能达到用户友好体验的目的.导航应该包含用户需要的内容,并提供明确的路径.如果用户知道跳转的具体页面,就会进行点击. 首先,确保导航在用

标签之美一——HTML基础元素

标签之美--HTML基础标签使用总结 HTML是一种标记语言,因此,标签便是HTML的核心,一些基础标签的用法总结如下: 1.<html></html> 任何HTML文件都会有这样一个标签,标记网页的开始和结束. 2.<head></head> 头部标签中可以包含许多网页的头信息. 3.<title></title> 这个标签包含在头部标签内,其内容就是网页显示的标题,比如: ? 1 2 3 4 5 <html> <

产品需求文档(PRD)的一些基础元素

文章描述:写好PRD文档的八个要素. 1.1 Purpose (产品愿景) 必须对产品要解决的问题有深刻的了解,阐明即将开发的产品如何满足该需求. 产品经理应该非常清晰.准确地定义产品是什么,解决什么,意在成为什么,并与产品相关的各个角色(老板.设计师.开发.用户)交流此愿景. 1.2 Objective (产品目标) 将前述定义的产品愿景,分解为具体要实现的体验目标,并厘清每个细分目标的验收标准,如: 1.2.1 流畅无刷新的体验 1.2.2 设计简单.易用.有趣 1.2.3 高度关注用户隐私

分析网络风险投资商的几个基础元素

前言: &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;       为什么这次我会写这篇文章呢?主要看到一位好朋友最近要折磨找风险投资的事,所以也得一些经验也结合了自己的经历和一些自己的想法,所以写这篇文章.不多说了进入正题! 如果您有一个新的想法(项目),但是又缺少资金.那么有可能大多数的人只有两条出路:要么就是想尽办法去贷款,要么就是想尽办法去找投资商.当然找投资商是一件非常困难的事,也有可能是一件很容易的事

Cocos-2d 坐标系及其坐标转换

 原作者:jlins  出处:博客园http://www.cnblogs.com/dyllove98/p/3231175.html  Cocos-2d中,涉及到4种坐标系: GL坐标系Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上.  屏幕坐标系苹果的Quarze2D使用的是不同的坐标系统,原点在屏幕左上角,x轴向右,y轴向下.ios的屏幕触摸事件CCTouch传入的位置信息使用的是该坐标系.因此在cocos2d中对

基础业务集成开发平台(BusinessWorks) - 概要设计篇

Businesworks的设计目标是为复杂业务系统提供平台化的底层支持,所谓平台化,就是对业务开发能以扩展,隔离的方式推进,驱动业务快速支持. 目前阿里很多的业务系统随着业务支持的增加,慢慢发展成为一个庞大的铁板一块式monolithic(铁板一块式) 风格的强耦合系统,系统本身可能经历一些重构和优化,满足新业务发展.但整体上还是为了快速的满足业务需求,在主流程上打补丁的方式,对业务的响应能力越来越差.于是平台化被提上日程,希望重新审视系统的架构设计,使架构不成为业务快速发展的瓶颈,并且进一步促

《Cocos2D权威指南》——导读

前言 为什么要写这本书 2011年10月5日,秋风萧瑟,阴雨绵绵,在这颗蔚蓝色的美丽星球上,一代传奇伟人乔布斯在亲友的陪伴下安然离去,宛若流星划过天际,空留那辆银色的奔驰SL55AMG在落叶纷飞中孤独守候着曾经的主人.这个世界从此失去了一位引领科技创新的时代领袖. 从1976年在父母的车库中创业开始,乔布斯参与.开创并改变了几个行业-PC.电脑动画.数字音乐.移动互联网.他创办了苹果公司,中途又因某些原因被苹果驱逐.然而在苹果挣扎于濒死的边缘时,他又挺身而出将苹果救活,并把它推到无人可以企及的高