微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cocos2dx 3.0 实战之—— 重写《超级马里奥》其一对新建项目的一些修改

学习cocos2dx也有一段时间了,但是始终只是停留在看一些无私的程序员们贡献的教程和源码上改一些代码成为自己的东西,能力停滞不前。作为一个想参加稍微偏大型点的游戏项目的人来说,这种情况表示相当的苦逼。

最近心血来潮,看到官方推荐的源码中有一款还不错的《超级马里奥》的源码,于是就下下来学习一下。

这里说明一下,我此次的重新,基本上是仿照这个源码写的,不同的是,在学习其同时,我加入了一点自己的东西。 这里给上原源码连接: http://cn.cocos2d-x.org/tutorial/show?id=2053


因为我准备重写这个游戏,所以这里我会重新创建一个项目一切从头开始

我不喜欢写配置开发环境,因为这对于一个程序员来说是基础中的基础。所以,开发环境的东西请自行搞定。

我们首先创建一个项目叫做SuperMarioDemo,创建完成之后如图:


上面是创建完项目用VS打开的项目代码。对于原项目我删去HelloWorldScene.h和HelloWorldScene.cpp两个文件。然后对AppDelegate.h和AppDelegate.cpp做了如下修改

AppDelegate.h
/**
 * 项目的入口类的声明
 */
#ifndef  _APP_DELEGATE_H_
#define  _APP_DELEGATE_H_

#include "cocos2d.h"

USING_NS_CC;
/**
 * 创建app的入口类继承自cocos2dx的Application类
 */
class  AppDelegate : private Application
{
public:
	/**
	 * 构造函数
	 */
    AppDelegate();
	/**
	 * 析构函数
	 */
    virtual ~AppDelegate();
	/**
	 * app加载完成函数
	 */
    virtual bool applicationDidFinishLaunching();
	/**
	 * app进入后台运行函数
	 */
    virtual void applicationDidEnterBackground();
	/**
	 * app从后台被唤醒的函数
	 */
    virtual void applicationWillEnterForeground();
};
#endif 

AppDelegate.cpp

/**
 * 游戏入口类的实现
 */
#include "AppDelegate.h"
#include "SimpleAudioEngine.h"

using namespace CocosDenshion;
/**
 * 构造函数,构造AppDelegate
 */
AppDelegate::AppDelegate() {}

/**
 * 析构函数,回收或者回收前的最后一次操作
 */
AppDelegate::~AppDelegate() {}
/**
 * 主程序加载完成
 */
bool AppDelegate::applicationDidFinishLaunching() {
	//创建一个单例导演
	Director *director = Director::getInstance();
	//通过导演获取一个OpenGL坐标系视图
    auto glview = director->getopenGLView();
	//如果没有获取到
    if(!glview) {
		//创建一个名叫“超级玛丽”的窗口
        glview = GLView::create("超级玛丽");
		//设置窗口为当期OpenGL坐标系视图
        director->setopenGLView(glview);
    }
	//显示帧率
    director->setdisplayStats(true);
	//认设置每秒60帧
    director->setAnimationInterval(1.0 / 60);
	//这里是用于显示我们定义的场景
    //auto scene = HelloWorld::createScene();
	//运行这个场景
   // director->runWithScene(scene);
	//因为函数是需要返回一个bool类型的返回值的,这里返回true
    return true;
}
/**
 * 当游戏被中断(比如打电话进来了)时自动响应的方法
 */
void AppDelegate::applicationDidEnterBackground() {
	//暂停背景音乐播放
	SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
	//停止动作
    Director::getInstance()->stopAnimation();
}
/**
 * 游戏被重新唤起时调用方法
 */
void AppDelegate::applicationWillEnterForeground() {
	//重新开启动作
    Director::getInstance()->startAnimation();
	//继续播放背景音乐
    SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
}

如此,我得到的界面是这样的:



当然,不用着急,因为里面还什么都没做,细心的看会发现


这几行已经被注释了,因为我还没有部署界面和场景,所以程序给的就是一个黑色的界面。

效果是这样的就没错了,这里我需要对C++和Cocos2dx的一些东西解释一下。

第一,在程序中.h文件的前面2行和最后一行的#ifndef...#define..#endif宏的作用是防止文件被多次引用,即如果项目中有多个.h文件的ifndef后面的大写(一般大写)名称一样的话除了创建的第一个.h文件里面的声明是可用的外,其他都无效,所以在使用的时候应避免重复。

第二,USING_NS_CC;此句同 using namespace cocos2d; 即使用cocos2dx的命名空间,使用了词句之后在后面的程序中如果遇到cocos2dx里面封装的类的时候可以不必使用cocos2d::封装类。如原代码中的class AppDelegate : private cocos2d::Application
在使用了命名空间之后可以直接写成class AppDelegate : private Application。

第三,音乐类 (SimpleAudioEngine)的使用要注意加入两个的东西。#include "SimpleAudioEngine.h"和using namespace CocosDenshion;否则报错

至此,我们的新建的原项目已经基本改完,下面一篇我将在里面再加入一些一套资源的自适应代码。然后加入第一个界面的内容

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐