cocos2d-x cpp-test学习
来源:互联网 发布:网络对人们的好处 编辑:程序博客网 时间:2024/06/07 23:17
01.
这一回主要搭建大致的框架,写程序的过程中错误不断,磕磕碰碰才写到现在,可见自己的能力是多么的差,所以要多写程序。
多思考代码的逻辑,
这一章主要谢了一个测试ActionManager,
其中有CallFunc和CallFuncN有什么区别?
CC_CALLBACK_0
CC_CALLBACK_1
和其它几个有什么区别?
回答这两个问题,写到这里进行下一章学习。
#ifndef ACTIONMANAGERLAYER_H#define ACTIONMANAGERLAYER_H#include "cocos2d.h"USING_NS_CC;static const char s_pathGrossini[] = "Images/grossini.png";enum { kTagNode, kTagGrossini, kTagSequence};class ActionManagerLayer : public Layer {public: ActionManagerLayer(); virtual ~ActionManagerLayer(); CREATE_FUNC(ActionManagerLayer); virtual bool init(); static Scene *createScene();private: void removeThis();};#endif // ACTIONMANAGERLAYER_H
#include "ActionManagerLayer.h"ActionManagerLayer::ActionManagerLayer(){}ActionManagerLayer::~ActionManagerLayer(){}bool ActionManagerLayer::init(){ if (!Layer::init()) return false; auto _screenSize = Director::getInstance()->getWinSize(); auto sprite = Sprite::create(s_pathGrossini); sprite->setPosition(Vec2(_screenSize.width/2, _screenSize.height/2)); addChild(sprite, 1, kTagGrossini); // Sum of all action's duration is 1.5 second. // sprite->runAction(RotateBy::create(1.5f, 90)); sprite->runAction(Sequence::create(DelayTime::create(1.4f), FadeOut::create(1.1f), nullptr)); // After 1.5 second, self will be removed. sprite->runAction(Sequence::create(DelayTime::create(1.4f), CallFunc::create(CC_CALLBACK_0(ActionManagerLayer::removeThis, this)), nullptr)); return true;}cocos2d::Scene *ActionManagerLayer::createScene(){ Scene *scene = Scene::create(); Layer *layer = ActionManagerLayer::create(); scene->addChild(layer); return scene;}void ActionManagerLayer::removeThis(){ auto sprite = getChildByTag(kTagGrossini); sprite->removeChild(sprite, this);}
#include "HelloWorldScene.h"#include "SimpleAudioEngine.h"#include "ActionManagerLayer.h"USING_NS_CC;Scene* HelloWorld::createScene(){ // 'scene' is an autorelease object auto scene = Scene::create(); // 'layer' is an autorelease object auto layer = HelloWorld::create(); auto layerColor = LayerColor::create(Color4B(200, 0, 0, 100)); // add layer as a child to scene scene->addChild(layer); scene->addChild(layerColor); // return the scene return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){ ////////////////////////////// // 1. super init first if ( !Layer::init() ) { return false; } auto visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto _screenSize = Director::getInstance()->getWinSize(); ///////////////////////////// // 2. add a menu item with "X" image, which is clicked to quit the program // you may modify it. // add a "close" icon to exit the progress. it's an autorelease object auto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 , origin.y + closeItem->getContentSize().height/2)); // create menu, it's an autorelease object auto menu = Menu::create(closeItem, NULL); menu->setPosition(Vec2::ZERO); this->addChild(menu, 1); ///////////////////////////// // 3. add your codes below... // add a label shows "Hello World" // create and initialize a label /* auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24); // position the label on the center of the screen label->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height - label->getContentSize().height)); // add the label as a child to this layer this->addChild(label, 1); // add "HelloWorld" splash screen" auto sprite = Sprite::create("HelloWorld.png"); // position the sprite on the center of the screen sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); // add the sprite as a child to this layer this->addChild(sprite, 0); */ /* std::ostringstream osr; Vector<MenuItem *>menuItems; MenuItemFont *(menuItem[64]); for (int i = 0 ;i < 16; i++) { for (int j = 0; j < 4; j++) { osr << "menuItem_" << (i*4 + j); menuItem[i*4+j] = MenuItemFont::create(osr.str()); menuItem[i*4+j]->setPosition(Vec2(_screenSize.width*(j+1)/4-140, _screenSize.height/16*(16-i)-20)); menuItems.pushBack(menuItem[i*4+j]); osr.str(""); } } auto mainMenu = Menu::createWithArray(menuItems); mainMenu->setPosition(Vec2::ZERO); this->addChild(mainMenu); auto director = Director::getInstance(); menuItem[0]->setString("ActionManager"); menuItem[0]->setCallback([&](Ref *sender) { director->replaceScene(ActionManagerLayer::createScene()); }); */ auto menuItem1 = MenuItemFont::create("ActionManager"); menuItem1->setPosition(Vec2(_screenSize.width/4 - 140, _screenSize.height/16*15)); menuItem1->setCallback([&](Ref *sender) { Director::getInstance()->replaceScene(ActionManagerLayer::createScene()); }); Vector<MenuItem *> menuItems; menuItems.pushBack(menuItem1); auto mainMenu = Menu::createWithArray(menuItems); mainMenu->setPosition(Vec2::ZERO); this->addChild(mainMenu); return true; return true;}void HelloWorld::menuCloseCallback(Ref* pSender){ //Close the cocos2d-x game scene and quit the application Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0);#endif /*To navigate back to native iOS screen(if present) without quitting the application ,do not use Director::getInstance()->end() and exit(0) as given above,instead trigger a custom event created in RootViewController.mm as below*/ //EventCustom customEndEvent("game_scene_close_event"); //_eventDispatcher->dispatchEvent(&customEndEvent); }
#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"class HelloWorld : public cocos2d::Layer{public: static cocos2d::Scene* createScene(); virtual bool init(); // a selector callback void menuCloseCallback(cocos2d::Ref* pSender); // implement the "static create()" method manually CREATE_FUNC(HelloWorld);};#endif // __HELLOWORLD_SCENE_H__
#ifndef _APP_DELEGATE_H_#define _APP_DELEGATE_H_#include "cocos2d.h"/**@brief The cocos2d Application.Private inheritance here hides part of interface from Director.*/class AppDelegate : private cocos2d::Application{public: AppDelegate(); virtual ~AppDelegate(); virtual void initGLContextAttrs(); /** @brief Implement Director and Scene init code here. @return true Initialize success, app continue. @return false Initialize failed, app terminate. */ virtual bool applicationDidFinishLaunching(); /** @brief Called when the application moves to the background @param the pointer of the application */ virtual void applicationDidEnterBackground(); /** @brief Called when the application reenters the foreground @param the pointer of the application */ virtual void applicationWillEnterForeground();};#endif // _APP_DELEGATE_H_
#include "AppDelegate.h"#include "HelloWorldScene.h"#include "SimpleAudioEngine.h"USING_NS_CC;using namespace CocosDenshion;// static cocos2d::Size designResolutionSize = cocos2d::Size(480, 320);static cocos2d::Size designResolutionSize = cocos2d::Size(1280, 720);static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320);static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768);static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536);AppDelegate::AppDelegate(){}AppDelegate::~AppDelegate() {}// if you want a different context, modify the value of glContextAttrs// it will affect all platformsvoid AppDelegate::initGLContextAttrs(){ // set OpenGL context attributes: red,green,blue,alpha,depth,stencil GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8}; GLView::setGLContextAttrs(glContextAttrs);}// if you want to use the package manager to install more packages, // don't modify or remove this functionstatic int register_all_packages(){ return 0; //flag for packages manager}bool AppDelegate::applicationDidFinishLaunching() { // initialize director auto director = Director::getInstance(); auto glview = director->getOpenGLView(); if(!glview) {#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) glview = GLViewImpl::createWithRect("cocosdemo", cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height));#else glview = GLViewImpl::create("cocosdemo");#endif director->setOpenGLView(glview); } // turn on display FPS director->setDisplayStats(false); // set FPS. the default value is 1.0/60 if you don't call this director->setAnimationInterval(1.0f / 30); // Set the design resolution glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::EXACT_FIT); /* auto frameSize = glview->getFrameSize(); // if the frame's height is larger than the height of medium size. if (frameSize.height > mediumResolutionSize.height) { director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width)); } // if the frame's height is larger than the height of small size. else if (frameSize.height > smallResolutionSize.height) { director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height, mediumResolutionSize.width/designResolutionSize.width)); } // if the frame's height is smaller than the height of medium size. else { director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width)); } */ register_all_packages(); std::vector<std::string> searchPaths; searchPaths.push_back(""); auto fileUtils = FileUtils::getInstance(); fileUtils->setSearchPaths(searchPaths); // create a scene. it's an autorelease object auto scene = HelloWorld::createScene(); // run director->runWithScene(scene); return true;}// This function will be called when the app is inactive. Note, when receiving a phone call it is invoked.void AppDelegate::applicationDidEnterBackground() { Director::getInstance()->stopAnimation(); // if you use SimpleAudioEngine, it must be paused // SimpleAudioEngine::getInstance()->pauseBackgroundMusic();}// this function will be called when the app is active againvoid AppDelegate::applicationWillEnterForeground() { Director::getInstance()->startAnimation(); // if you use SimpleAudioEngine, it must resume here // SimpleAudioEngine::getInstance()->resumeBackgroundMusic();}
0 0
- cocos2d-x cpp-test学习
- Cocos2d-x 3.0 红孩儿私家必修:第二章cpp-empty-test:还是那个HelloWorld!
- Cocos2d-x 3.0 红孩儿私家必修 - 第二章 cpp-empty-test
- 怎么在MAC OSX机器上运行COCOS2D-X 3.9的CPP-TEST的例子
- cocos2d-x main.cpp详解
- cocos2d-x-2.2/samples/Cpp/SimpleGame/ 问题
- cocos2D-x关于CCSpriteFrame的cpp实现
- Cocos2d-x-3.4 从零开始之 AppDelegate.cpp
- Cocos2d-x中的AppDelegate.cpp文件解析
- cocos2d-x-3.2之cpp-tests框架,cocos2d
- Cocos2d-x3.3RC0 Cpp-test分析之NewAudioEngineDemo
- Cocos2d-x3.3RC0 Cpp-test分析之Camera3DDemo
- Cocos2d-x3.3RC0 Cpp-test分析之ActionManagerTest
- Cocos2d-x3.3RC0 Cpp-test分析之Camera3DDemo
- cocos2d-x 3.5版 运行test工程
- cocos2d-x-lua-加载官方test项目
- cocos2d-x初探学习笔记(2)--重要概念及Test例子结构
- cocos2d-x初探学习笔记(2)--重要概念及Test例子结构
- 并查集 POJ 1182 捕食链
- [WOJ26 Lost in WHU]矩阵快速幂
- Android图像处理整理
- 友盟多渠道打包 Android Apk
- POJ
- cocos2d-x cpp-test学习
- 在Ubuntu上用anaconda3安装opencv3
- 关于锚点和label的纯css内容切换
- HTML基本语法和语义
- 熄灯之后的学习——再读《MySQL必知必会》(3)
- 实用的好东西比较器
- 相邻区域染色最小染色数问题 POJ 1129
- JSP基本知识
- node.js项目改进之分离logic层确立数据中枢