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 firstif ( !Layer::init() ){return false;}Size visibleSize = Director::getInstance()->getVisibleSize();Vec2 origin = Director::getInstance()->getVisibleOrigin();return true; }然后把,需要的圖片文件拷貝進工程中的Resources文件夾里
bool HelloWorld::init() {//// 1. super init firstif ( !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 firstif ( !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 firstif ( !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 firstif ( !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));//需要計時器時間表切換layerschedule([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();總結
以上是生活随笔為你收集整理的Cocos2d-x 基础元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 堆与栈的区别
- 下一篇: Android加载/处理超大图片神器!S