cocos2d-x 3.0的入门程序:helloworld
看过了这么多不同方向的应用,发现很多程序入门都是helloworld
helloworld是所有程序员的绝对初恋
先看一下程序的运行结果吧
然后就是他的工程代码
工程的目录有两个
Classes:程序中的类
AppDelegate.h/cpp:Cocos2d-x程序框架
AppMacros.h:所用到的宏,主要是设置分辩率及对应的资源目录
HelloWorldScene.h/cpp:场景显示层
win32:WIN32程序所涉及的主函数
main.cpp:winMain主函数
WinMain函数:
#include "main.h"
#include "AppDelegate.h"
#include "cocos2d.h" USING_NS_CC; int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine); // create the application instance
AppDelegate app;
//运行创建程序
return Application::getInstance()->run();
}
一切都被封装到程序类AppDelegate中,这是一个基于Cocos2d-x的cocos2d::Application类的派生类。
它将程序框架封装为一个类,提供了统一的多平台上基本程序框架的实现。
AppDelegate.cpp:
#include "AppDelegate.h"
#include "HelloWorldScene.h" USING_NS_CC; AppDelegate::AppDelegate() { } AppDelegate::~AppDelegate()
{
} bool AppDelegate::applicationDidFinishLaunching() {
// initialize director创建导演
auto director = Director::getInstance();
//创建opengl窗口
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLView::create("My Game");
director->setOpenGLView(glview);
} // turn on display FPS 打开FPS
director->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call thi 1秒60帧
director->setAnimationInterval(1.0 / 60); // 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. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground() {
Director::getInstance()->stopAnimation(); // if you use SimpleAudioEngine, it must be pause
// SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
}
//当电话完成,选择恢复游戏时,响应这句
// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground() {
Director::getInstance()->startAnimation(); // if you use SimpleAudioEngine, it must resume here
// SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
}
下面我们来看一下HelloWorld场景,它是一个基于cocos2d::Layer的派生类。cocos2d::Layer是什么?在这里,我想打个比方来建立一些基本的认知,比方说我们生活在地球上,地球属于宇宙内的一部分。从Cocos2d-x的框架体系来看,我们是Sprite精灵,地球是Layer,而宇宙是Scene。
一个程序要想表现出精彩的世界,要先建立一个宇宙Scene,然后增加地球,月球,太阳等Layer,然后在这些Layer上增加相应的物体。而我们站在地球上,地球运动,我们也会跟着一起运动。
OK,现在我们来看一下如何创建Scene和Layer:
HelloWorldScene.h:
#include "HelloWorldScene.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(); // add layer as a child to scene
scene->addChild(layer); // return the scene
return scene;
} // on "init" you need to initialize your instance
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}
//得到屏幕的大小,得到原点
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin(); /////////////////////////////
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.
// // 创建一个菜单项,它由两张图片来表现普通状态和按下状态,设置按下时调用menuCloseCallback函数响应关闭
// 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 = LabelTTF::create("Hello World", "Arial", 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); return true;
} //点close菜单项的时候来回调的
void HelloWorld::menuCloseCallback(Ref* pSender)
{
////如果是WP8平台,弹出消息框提示一下。
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
return;
#endif
//终止程序。
Director::getInstance()->end();
//如果是ios平台
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
Layer中增加了精灵,按钮,文字等表现物,有了这些表现物,一个Layer才有价值。
参考:http://blog.csdn.net/honghaier/article/details/24518863(谢谢)
cocos2d-x 3.0的入门程序:helloworld的更多相关文章
- Java入门程序HelloWorld
程序开发步骤说明 开发环境已经搭建完毕,可以开发我们第一个Java程序了.Java程序开发三步骤:编写.编译.运行.如下图所示 详解: 编写源程序:通俗来说就是我们通过Java的语法自己写的代码 编译 ...
- 【Irrlicht鬼火引擎】掌握引擎使用流程,入门程序HelloWorld
分析 一.简述使用步骤 一般而言,对于一个简单的程序,Irrlicht引擎的一般使用步骤如下: 预处理:(1)包含 <irrlicht.h> 头文件#include <irrlich ...
- asp.net mvc3.0第一个程序helloworld开发图解
步骤一:新建asp.net mvc3.0项目 (选择Razor模板) 步骤二:创建控制器 步骤三:控制器源码内右键创建对应视图 步骤四:控制器内添加代码 步骤五:视图页面输出内容 步骤六:F5调试
- Webstorm10.0.3破解程序及汉化包下载、Webstorm配置入门指南
核心提示: WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“Web前端开发神器”.“最强大的HTML5编辑器”.“最智能的JavaSscri ...
- ArcGIS for Android入门程序之DrawTool2.0
来自:http://blog.csdn.net/arcgis_mobile/article/details/8084763 GISpace博客<ArcGIS for Android入门程序之Dr ...
- scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld
scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld 学习了: http://blog.csdn.net/wangmuming/article/details/3407911 ...
- 01-java前言、入门程序、变量、常量
今日目标 能够计算二进制和十进制数之间的互转 能够使用常见的DOS命令 理解Java语言的跨平台实现原理 jvm是运行java程序的假想计算机,所有的java程序都运行在它上面.java编写的软件可以 ...
- SpringMVC系列(一)SpringMVC概述和搭建SpringMVC的第一个helloWord入门程序
一.SpringMVC 概述 • Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一 • Spring3.0 后全面超越 Struts2,成为最优秀的 MVC ...
- ant入门程序
一. ant简单介绍 Ant是apache的一个核心项目, 它的作用是项目自己主动化构建, 由于它内置了Javac.Java.创建文件夹.拷贝文件等功能, 直接执行build.xml文件就能够编译我们 ...
随机推荐
- 初识ImageSwither
imageswitcher继承自viewswitcher,使用ImageSwither只需要两步: 1.为ImageSwither提供一个ViewFactory,该ViewFactory生成的View ...
- PHP @ at 记号的作用
看PHP的代码,总有些行前边有@符号,一直不知道是什么意思. 例如dede5.7 @$ni=imagecreatetruecolor($ftoW,$ftoH); 今天用到了,就记一下吧.其实它 ...
- POJ - 3109 Inner Vertices
不存在-1的情况,而且最多一轮就结束了.如果新增加的黑点v0会产生新的黑点v1,那么v0和v1肯定是在一条轴上的,而原来这条轴上已经有黑点了. 离散以后扫描线统计,往线段上插点,然后查询区间上点数. ...
- MMU CPU及思想
要素: 1)CPU访问寻址地址空间: 2)内存不足以容纳所有进程数据: 3)MMU将进程数据分割,保留当前使用数据. http://baike.baidu.com/link?url=KHyp37Ysi ...
- 有一个form,包含两个text,和两个按钮,当用户按第一个按扭时把数据提交到url1,按第二个按钮提交到url2,怎么实现呀?
<form name="form1" method="post" action=""> <input type=" ...
- vuejs中v-if的深层用法v-else,v-else-if,key
<div id='root'> <div v-if='show'>helle world</div> <button @click='handleClick' ...
- Eclipse快捷键功能
转载一篇另人写的:https://blog.csdn.net/qq_30617755/article/details/50781003 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能 ...
- 20145238 —《Java程序设计》—第5周学习总结
20145238 <Java程序设计>第5周学习总结 教材学习内容总结 第八章异常处理 8.1.1使用try.catch ·教材范例用户连续输入整数,输入0结束后显示输入数的平均值(代码如 ...
- idea中将项目转换成Maven项目
第一步:项目右键->Add Framework... 选择maven ok 这样就成功转换成了一个maven项目
- C# continue语句
一.C# continue语句 continue语句在循环体中结束本次循环,而重新开始下一次循环. 语法格式如下: continue;二.示例 using System;using System. ...