#include "main.h"
#include "AppDelegate.h"
#include "CCEGLView.h"
USING_NS_CC;
// uncomment below line, open debug console
// #define USE_WIN32_CONSOLE
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
#ifdef USE_WIN32_CONSOLE
AllocConsole();
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
#endif
// create the application instance
AppDelegate app;
//CCEGLView是单例设计模式,通过调用sharedOpenGLView()(以后只要是看到shared...就代表是一种单例设计模式)函数,获得全局唯一的opengl图像引擎的实例
CCEGLView* eglView = CCEGLView::sharedOpenGLView();
//以下这句比较重要,setFrameSize(x,y)是设置游戏窗口的大小,通过改变传入的值,可以改变游戏窗口的大小,看到窗口顶部的那行字了吗,就是写的窗口的大小
eglView->setFrameSize(480, 320);
int ret = CCApplication::sharedApplication()->run();
#ifdef USE_WIN32_CONSOLE
FreeConsole();
#endif
return ret;
}
#include "cocos2d.h" //想要使用cocos2d-x引擎,就要包含这个头文件
#include "CCEGLView.h" //这个是opengl图形引擎的头文件
#include "AppDelegate.h" //这个是生命周期类的头文件
#include "HelloWorldScene.h" //这个是HelloWorld场景的头文件
#include "SimpleAudioEngine.h" //这个是声音引擎的头文件
//要使用声音引擎,必须使用命名空间CocosDenshion
using namespace CocosDenshion;
//要使用cocos2d-x引擎,必须使用命名空间cocos2d,这个宏定义相当于using namespace cocos2d,大家可以选中它,按下f12,转到它的定义
USING_NS_CC;
//以下这俩个分别是生命周期类的构造函数和析构函数
AppDelegate::AppDelegate()
{
}
AppDelegate::~AppDelegate()
{
//游戏生命周期结束的时候停止播放声音,知道c++基础的人一定知道end()函数是静态函数吧
SimpleAudioEngine::end();
}
//当游戏启动的时候,就会调用这个函数,所以以后我们应该从这个函数看起
bool AppDelegate::applicationDidFinishLaunching()
{
//导演类的初始化,又是shared...所以又是单例设计模式啊
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
//大家看到了游戏左下角的那个数字60了吗,这个就是帧率(就是每秒钟游戏屏幕刷新的次数),这里可以设置它是否显示在左下角
pDirector->setDisplayStats(true);
//当然这里就是设置这个帧率了,在手机上的时候帧率不能小于30,否则游戏玩起来就会卡,帧率越高当然越耗CPU了,也就越费电了,所以帧率应该合理的设置
pDirector->setAnimationInterval(1.0 / 60);
//创建一个helloworld场景,从这里就能看出scene是一个静态函数吧
CCScene *pScene = HelloWorld::scene();
//然后导演调用runWithScene()函数来运行helloworld场景
pDirector->runWithScene(pScene);
return true;
}
//当我们玩游戏的时候突然被其他事情打断的时候,比如接电话,就会调用这个函数
void AppDelegate::applicationDidEnterBackground()
{
//导演调用stopAnimation()来停止播放画面
CCDirector::sharedDirector()->stopAnimation();
//声音引擎停止播放声音
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
//当事件处理完成之后就会调用这个函数,比如电话接听完毕
void AppDelegate::applicationWillEnterForeground()
{
CCDirector::sharedDirector()->startAnimation();
SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
#include "SimpleAudioEngine.h"
//HelloWorld继承自CCLayer图层
class HelloWorld : public cocos2d::CCLayer
{
public:
//这是HelloWorld场景类的初始化函数,是一个虚函数
virtual bool init();
//这是一个静态函数,可以通过指向类名的指针->scene()直接调用,返回一个CCScene场景的指针
static cocos2d::CCScene* scene();
//这是一个回调函数,是对单击结束按钮事件的响应函数
void menuCloseCallback(CCObject* pSender);
//这个宏可以通过f12看看他的具体实现,其实就是new一个对象,然后调用它的init函数(现在知道init函数什么时候调用了吧),然后返回该对象的指针
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
#include "HelloWorldScene.h"
using namespace cocos2d;
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
//这个do,while循环只会执行一次,为什么这样写,先不用管
do
{
//首先创建一个CCScene的场景,调用的是create函数,其实对象的创建大多数都是调用create函数
//这个create函数内部就是new一个对象,然后调用对象的init()函数,还有关于内存管理的一些工作,先不用管,你只需要记住c++中我们创建指向对象的指针是通过new,现在都封装在了create函数中了
//可能有时候我们需要往create()中传入一些东西,但是它的内部实现函数我上边说的,就是带了几个参数而已
scene = CCScene::create();
//CC_BREAK_IF宏的含义是如果没有创建成功对象scene,就跳出do,while语句
CC_BREAK_IF(! scene);
//大家可以对create()f12一下,看是不是到了CREATE_FUNC(HelloWorld)这了,说明我上边说的就是对的。这里产生了一个指向helloworld层的指针。
HelloWorld *layer = HelloWorld::create();
CC_BREAK_IF(! layer);
//将helloworld层添加到scene场景中,往一个场景中添加层,往层中添加精灵等都是用的这个函数addChild()
scene->addChild(layer);
} while (0);
//返回包含helloworld这个层的场景
return scene;
}
//有些人可能还会问init函数是什么时候调用的,我建议你好好看看上边的注释
bool HelloWorld::init()
{
bool bRet = false;
do
{
//首先初始化父类的init()函数
CC_BREAK_IF(! CCLayer::init());
//这是一个菜单项,对应图中的那个关闭按钮,传入俩张图片,对应正常状态时候的按钮盒按下状态的按钮图片
//第四个参数中menu_selector是菜单选择器,cocos2d-x中还有不少的选择器,先记住,menuCloseCallback对应那个回调函数,第三个参数this就代表是哪个类的回调函数
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback));
CC_BREAK_IF(! pCloseItem);
//设置这个按钮的坐标,ccp也是一个宏,用来设置坐标的,getWinSize()获得了屏幕的尺寸,返回CCSize,width、height是它的属性
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));
//创建一个菜单,在cocos2d-x中需要将菜单项添加到菜单中也就是CCMenu中才可以,NULL表示菜单项的结束。
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
//设置这个菜单的坐标CCPointZero对应(0,0)
pMenu->setPosition(CCPointZero);
CC_BREAK_IF(! pMenu);
//将菜单添加到HelloWorld的图层中,1表示的是深度,数字越小深度越深,只有添加到图层中才可以显示
this->addChild(pMenu, 1);
//创建一个文字,传入要显示的字,字体,大小,对应图片上的那个helloworld
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);
CC_BREAK_IF(! pLabel);
//获得屏幕的尺寸
CCSize size = CCDirector::sharedDirector()->getWinSize();
//为pLabel设置坐标
pLabel->setPosition(ccp(size.width / 2, size.height - 50));
//将这个文字天剑到图层中才能显示
this->addChild(pLabel, 1);
//往图层中添加一个精灵是最常用的,精灵初始化的时候传入了一张图片,这个资源就在resource下
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
CC_BREAK_IF(! pSprite);
//设置这个精灵的坐标
pSprite->setPosition(ccp(size.width/2, size.height/2));
//将精灵添加到图层中,深度是0
this->addChild(pSprite, 0);
bRet = true;
} while (0);
return bRet;
}
//当用户按下关闭按钮的时候调用该回调函数,CCObject代表的是和这个函数绑定的按钮,用的时候强制转化为CCMenuItemImg*
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
//导演调用end方法结束游戏
CCDirector::sharedDirector()->end();
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有