cocos2d-x 下的HelloWorld_weixin_34241036的博客-程序员宝宝

技术标签: 操作系统  游戏  移动开发  

 参考了沈大海的博客:

为什么要定义windows平台

因为在不同平台有不同的程序入口实现方式,windos平台有main.hmain.cpp,android平台有入口的Activity,iso平台有main.m,

但对于各平台的入口差异在cocos2d-x中做了完美的一致化处理,暂且不管是如何进行的,我们只需要基于一致的引擎入口进行开发就好了,

对于cocos2d-x引擎的入口我们定义为AppDelegate.hAppDelegate.cpp看这里面的方法有三个。

如下图:windows下工程的入口和引擎入口:

这几个方法会在各平台应用程序状态改变时候自动回调。

而状态的改变在不同平台是有差异的,cocos2d-x定义cocos2d::CCApplication类统一了各平台的差异,在cocos2d-x中只有1个窗口在运行(符合移动平台,但pc平台原本不是这样),窗口在分配空间,加载完成,被覆盖,被恢复时候会自动回调CCApplication中的函数,因此CCApplication在不同的平台,有不同的实现cpp,

(有兴趣同学可以阅读cocos2ds/platform下面的源代码,从cocos2d::CCApplication.h开始)

看注释就已经很明白了:

和android的每个activity的活动周期差不多

 

#ifndef  _APP_DELEGATE_H_
#define  _APP_DELEGATE_H_

#include "cocos2d.h"

/**
@brief    The cocos2d Application.

The reason for implement as private inheritance is to hide some interface call by CCDirector.
*/
class  AppDelegate : private cocos2d::CCApplication
{
public:
    AppDelegate();
    virtual ~AppDelegate();

    /**
    @brief    Implement CCDirector and CCScene init code here.
    @return true    Initialize success, app continue.
    @return false   Initialize failed, app terminate.
    */
    virtual bool applicationDidFinishLaunching();

    /**
    @brief  The function be called when the application enter background
    @param  the pointer of the application
    */
    virtual void applicationDidEnterBackground();

    /**
    @brief  The function be called when the application enter foreground
    @param  the pointer of the application
    */
    virtual void applicationWillEnterForeground();
};

#endif // _APP_DELEGATE_H_

 

  

 

----------------------------------------------------------------------------------------------------------------------------------

在这几个方法中,就可以做我们要做的事情了。

applicationDidFinishLaunching启动完成

加载游戏,播放音乐

applicationDidEnterBackground进入背景

音乐暂停,游戏暂停

applicationWillEnterForeground恢复窗口

音乐继续,游戏继续

可能,你会想,如果应用退出,我想保留游戏数据如何?

试者找找ccApplication中还有哪些方法。

 

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director 初始化导演,他是引擎的老大,单例模式
    CCDirector* pDirector = CCDirector::sharedDirector();

    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
	//绑定opengles窗口,可见,我们可以自定义openGLView
    pDirector->setOpenGLView(pEGLView);
	CCSize frameSize = pEGLView->getFrameSize();

    // Set the design resolution
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
    pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionShowAll);
#else
    pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder);
#endif

    
    vector<string> searchPath;

    // In this demo, we select resource according to the frame's height.
    // If the resource size is different from design resolution size, you need to set contentScaleFactor.
    // We use the ratio of resource's height to the height of design resolution,
    // this can make sure that the resource's height could fit for the height of design resolution.

    // if the frame's height is larger than the height of medium resource size, select large resource.
	if (frameSize.height > mediumResource.size.height)
	{
        searchPath.push_back(largeResource.directory);

        pDirector->setContentScaleFactor(MIN(largeResource.size.height/designResolutionSize.height, largeResource.size.width/designResolutionSize.width));
	}
    // if the frame's height is larger than the height of small resource size, select medium resource.
    else if (frameSize.height > smallResource.size.height)
    {
        searchPath.push_back(mediumResource.directory);
        
        pDirector->setContentScaleFactor(MIN(mediumResource.size.height/designResolutionSize.height, mediumResource.size.width/designResolutionSize.width));
    }
    // if the frame's height is smaller than the height of medium resource size, select small resource.
	else
    {
        searchPath.push_back(smallResource.directory);

        pDirector->setContentScaleFactor(MIN(smallResource.size.height/designResolutionSize.height, smallResource.size.width/designResolutionSize.width));
    }


    // set searching path
    CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath);
	
    // turn on display FPS
    pDirector->setDisplayStats(true);

    // set FPS. the default value is 1.0/60 if you don't call this
	//设置FPS 在cocos2d-x 启动后内部封装了FPS的逻辑,虽然helloWorld图片没变化,但其实一直在重绘。
    pDirector->setAnimationInterval(1.0 / 60);

    // create a scene. it's an autorelease object  创建一个场景
    CCScene *pScene = HelloWorld::scene(); 

    // run 显示这个场景到窗口,必然所有的绘制在场景中定义的
    pDirector->runWithScene(pScene);

    return true;
}

 

 

 

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
	CCLog("click the menu");
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
	CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
#else
    CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
#endif
}

  

总结:

Director启动一个scene。

2 addChild

回调函数

4 CCLog

 

 

转载于:https://www.cnblogs.com/aosting/p/3438869.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34241036/article/details/94563683

智能推荐

在Windows下安装配置OpenCV-Python-PyCharm开发环境_昊虹图像算法的博客-程序员宝宝

​一、Python的安装①下载Python的安装文件。Python发展至今,有很多版本,这里以python 3.68为例,其官网下载地址为:https://www.python.org/ftp/python/3.6.8/python-3.6.8-amd64.exe有时候官网下载比较慢,我把安装文件上传到百度网盘,分享给大家。python 3.68的百度网盘下载地址为:链接:https://pan.baidu.com/s/17qfs7yUNsUGzb1ab6ce8Aw提取码:nl5c②下载完成

超越Kubernetes:值得关注的5大云原生技术_xiaoyaGrace的博客-程序员宝宝

Kubernetes是一个开源容器管理平台,它现在已经成为了云原生的中流砥柱。自从把它移交给Cloud Native Compute Foundation(云原生计算基金)后,该项目在业界上取得了史无前例的关注,目前没有一个公有云环境不提供Kubernetes托管服务。Kubernetes正迅速成为现代容器化应用运行的管理平台。随着Kubernetes的崛起,它带来了一个全新的生态系统的形成。...

安卓图片轮播(banner)_王竹根的博客-程序员宝宝

github地址:https://github.com/youth5201314/banner效果图:Step 1.依赖bannerGradledependencies{ compile 'com.youth.banner:banner:1.4.10' //最新版本}123Step 2.添加权限到你的 AndroidManifest.xml&amp;lt;!-- if you want to ...

Airflow Scheduler源码解读_Mr_Wuuuuuuu的博客-程序员宝宝_airflow源码分析

文章目录1.Scheduler的启动和停止命令1.1 Scheduler启动命令1.2 Scheduler停止命令2.Scheduler程序源码2.1 cli.scheduler(): 接受命令行中的airflow scheduler命令2.2 BaseJob.run(): 向job表中新增SchdulerJob记录并调用子类的处理逻辑2.3 SchdulerJob._execute(): SchdulerJob的具体执行逻辑2.3.1 list_py_file_paths(self.subdir): 找到

JUC学习 - 阻塞队列1_TyuIn的博客-程序员宝宝

6、PriorityBlockingQueue一个支持优先级排序的无界阻塞队列,进入队列的元素会按照优先级进行排序。public class PriorityBlockingQueue&lt;E&gt; extends AbstractQueue&lt;E&gt; implements BlockingQueue&lt;E&gt;, java.io.Serializable无界的优先级阻塞队列,内部使用数组存储数据,达到容量时,会自动进行扩容,放入的元素会按照优先级进行排序,4个构造方法:

随便推点

运行 tomcat的时候报错:java.lang.UnsatisfiedLinkError_failure_Growing612的博客-程序员宝宝

运行 tomcat的时候,突然报出这个错误:java.lang.UnsatisfiedLinkError: E:\apache-tomcat-7.0.75\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform最快的解决方法是:删掉E:\apache-tomca

json文件存储 qt_Qt修改JSON文件_weixin_39616503的博客-程序员宝宝

我需要能夠讀取現有的JSON文件,對其進行修改(例如替換,移除和添加對象,數組和鍵值對),然後再次將文件寫出。Qt修改JSON文件我一直想讀,寫與這些內容的JSON文件:{"array": [{"name": "Channel","default": 1},{"name": "Size","default": 457}]}我讀成功的文件,但在不使用下面的代碼做出任何更改:QFile File("/...

java.lang.Math 复盘__大木_的博客-程序员宝宝

耍不动了…package com.beyond;import javax.sound.midi.Soundbank;public class MathTest { public static void main(String[] args) { System.out.println(Math.E); // 自然对数的底数 e。 System.out.println(Math.PI); // 圆周率 System.out.println(.

Airflow DAG声明的3种方式_雷禄辉的博客-程序员宝宝

先说明一下我使用的airflow 2.2.4版本 第一种使用标准构造函数,将dag通过参数传递进去 import pendulumfrom airflow import DAGfrom airflow.operators.python import PythonOperator​dag = DAG( dag_id='hello_world', start_date=pendulum.datetime(2022, 1, 1), schedule_interval=N...

推荐文章

热门文章

相关标签