`
abc20899
  • 浏览: 932488 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

解析Helloworld项目

 
阅读更多
在cocos2dx中的helloworld目录中

android 项目:

jni目录 Android.mk文件解析

LOCAL_PATH := $(call my-dir)        //项目的根路径
include $(CLEAR_VARS)
LOCAL_MODULE := helloworld      //工程项目名字

LOCAL_SRC_FILES := main.cpp    //包含c c++文件的名字

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../../cocos2dx \        //包含路径
                    $(LOCAL_PATH)/../../../../cocos2dx/platform \
                    $(LOCAL_PATH)/../../../../cocos2dx/include \
                    $(LOCAL_PATH)/../../../Classes                                            //类文件在class目录中

LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../../libs/$(TARGET_ARCH_ABI)) \       // 连接的库文件
                -lcocos2d -llog -lgame_logic
           
include $(BUILD_SHARED_LIBRARY)


main.cpp文件:
入口文件

#include "AppDelegate.h"     //主要头文件   此应用的委托文件
#include "cocos2d.h"
#include <jni.h>
#include <android/log.h>

#define  LOG_TAG    "main"
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)

using namespace cocos2d;

extern "C"
{

void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)
{
    if (!cocos2d::CCDirector::sharedDirector()->getOpenGLView())
    {
	cocos2d::CCEGLView *view = &cocos2d::CCEGLView::sharedOpenGLView();
        view->setFrameWidthAndHeight(w, h);
        // if you want to run in WVGA with HVGA resource, set it
        // view->create(480, 320);
        cocos2d::CCDirector::sharedDirector()->setOpenGLView(view);

        AppDelegate *pAppDelegate = new AppDelegate();
        cocos2d::CCApplication::sharedApplication().run();
    }
    else
    {
        cocos2d::CCTextureCache::reloadAllTextures();
        cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
    }
}

}



到classes目录中会看到c++的类文件

AppDelegate.h            //函数变量的声明

#ifndef  _APP_DELEGATE_H_
#define  _APP_DELEGATE_H_

#include "CCApplication.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 for initialize OpenGL instance, set source path, etc...
    */
    virtual bool initInstance();

    virtual bool applicationDidFinishLaunching();    //加载窗口完成

    virtual void applicationDidEnterBackground();

    virtual void applicationWillEnterForeground();
};

#endif // _APP_DELEGATE_H_




AppDelegate.cpp


#include "AppDelegate.h"

#include "cocos2d.h"
#include "HelloWorldScene.h"   //HelloWorld场景文件

#include "CCEGLView.h"          //CCEGLView.h

USING_NS_CC;

AppDelegate::AppDelegate() {

}

AppDelegate::~AppDelegate() {
}

//实例化   并且  判断当前是哪个平台
bool AppDelegate::initInstance() {
	bool bRet = false;
	do {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)  //如果平台是CC WIN32

		// Initialize OpenGLView instance, that release by CCDirector when application terminate.
		// The HelloWorld is designed as HVGA.
		CCEGLView * pMainWnd = new CCEGLView();
		CC_BREAK_IF(! pMainWnd
				|| ! pMainWnd->Create(TEXT("cocos2d: Hello JuneChiu"), 480, 320));

#endif  // CC_PLATFORM_WIN32

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)   //如果平台是CC ios

		// OpenGLView initialized in testsAppDelegate.mm on ios platform, nothing need to do here.

#endif  // CC_PLATFORM_IOS

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)   //如果平台是CC android

		// OpenGLView initialized in HelloWorld/android/jni/helloworld/main.cpp
		// the default setting is to create a fullscreen view
		// if you want to use auto-scale, please enable view->create(320,480) in main.cpp
		// if the resources under '/sdcard" or other writeable path, set it.
		// warning: the audio source should in assets/
		// cocos2d::CCFileUtils::setResourcePath("/sdcard");

#endif  // CC_PLATFORM_ANDROID

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WOPHONE)  //如果平台是CC WOPHONE

		// Initialize OpenGLView instance, that release by CCDirector when application terminate.
		// The HelloWorld is designed as HVGA.
		CCEGLView* pMainWnd = new CCEGLView(this);
		CC_BREAK_IF(! pMainWnd || ! pMainWnd->Create(320,480, WM_WINDOW_ROTATE_MODE_CW));

#ifndef _TRANZDA_VM_  
		// on wophone emulator, we copy resources files to Work7/NEWPLUS/TDA_DATA/Data/ folder instead of zip file
		cocos2d::CCFileUtils::setResource("HelloWorld.zip");
#endif

#endif  // CC_PLATFORM_WOPHONE
#if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
		// MaxAksenov said it's NOT a very elegant solution. I agree, haha
		CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)

		// Initialize OpenGLView instance, that release by CCDirector when application terminate.
		// The HelloWorld is designed as HVGA.
		CCEGLView * pMainWnd = new CCEGLView();
		CC_BREAK_IF(! pMainWnd
				|| ! pMainWnd->Create("cocos2d: Hello World", 480, 320 ,480, 320));

		CCFileUtils::setResourcePath("../Resource/");

#endif  // CC_PLATFORM_LINUX

#if (CC_TARGET_PLATFORM == CC_PLATFORM_BADA)

		CCEGLView * pMainWnd = new CCEGLView();
		CC_BREAK_IF(! pMainWnd|| ! pMainWnd->Create(this, 480, 320));
		pMainWnd->setDeviceOrientation(Osp::Ui::ORIENTATION_LANDSCAPE);
		CCFileUtils::setResourcePath("/Res/");

#endif  // CC_PLATFORM_BADA

#if (CC_TARGET_PLATFORM == CC_PLATFORM_QNX)
		CCEGLView * pMainWnd = new CCEGLView();
		CC_BREAK_IF(! pMainWnd|| ! pMainWnd->Create(480, 320));
		CCFileUtils::setResourcePath("./app/native/Resource");
#endif // CC_PLATFORM_QNX
		bRet = true;
	} while (0);
	return bRet;
}

//加载窗口 
bool AppDelegate::applicationDidFinishLaunching() {
	// initialize director
	CCDirector *pDirector = CCDirector::sharedDirector();   // 实例化导演

	pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());  //设置OpenGLView

	// enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
//     pDirector->enableRetinaDisplay(true);

	// turn on display FPS
	pDirector->setDisplayFPS(true);      //设置是否显示帧率显示

	// pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);

	// set FPS. the default value is 1.0/60 if you don't call this
	pDirector->setAnimationInterval(1.0 / 60);        //设置动画间隔时间

	// create a scene. it's an autorelease object
	CCScene *pScene = HelloWorld::scene();     //设置场景

	// run
	pDirector->runWithScene(pScene);               //运行场景

	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() {
	CCDirector::sharedDirector()->pause();                      //导演 暂停

	// if you use SimpleAudioEngine, it must be pause
	// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}

// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground() {
	CCDirector::sharedDirector()->resume();                    //导演 运行

	// if you use SimpleAudioEngine, it must resume here
	// SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();   //设置背景音乐
}




HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"

class HelloWorld : public cocos2d::CCLayer
{
public:
	// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
	virtual bool init();     //初始化

	// there's no 'id' in cpp, so we recommand to return the exactly class pointer
	static cocos2d::CCScene* scene();
	
	// a selector callback
	virtual void menuCloseCallback(CCObject* pSender);   //关闭菜单

	// implement the "static node()" method manually
	LAYER_NODE_FUNC(HelloWorld);
};

#endif // __HELLOWORLD_SCENE_H__





HelloWorldScene.cpp


#include "HelloWorldScene.h"

USING_NS_CC;

CCScene* HelloWorld::scene()      //实例化 HelloWorld场景
{
	// 'scene' is an autorelease object
	CCScene *scene = CCScene::node();
	
	// 'layer' is an autorelease object
	HelloWorld *layer = HelloWorld::node();

	// 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 ( !CCLayer::init() )
	{
		return false;
	}

	/////////////////////////////
	// 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
	CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage(
										"CloseNormal.png",
										"CloseSelected.png",
										this,
										menu_selector(HelloWorld::menuCloseCallback) );
         //设置位置
	pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
         
       //创建菜单
	// create menu, it's an autorelease object
	CCMenu* pMenu = CCMenu::menuWithItems(pCloseItem, NULL);
	pMenu->setPosition( CCPointZero );
	this->addChild(pMenu, 1);

	/////////////////////////////
	// 3. add your codes below...

	// add a label shows "Hello World"
	// create and initialize a label
        //创建标题
    CCLabelTTF* pLabel = CCLabelTTF::labelWithString("Hello World", "Arial", 24);
	// ask director the window size
	CCSize size = CCDirector::sharedDirector()->getWinSize();       //用导演获取窗口的大小

	// position the label on the center of the screen
	pLabel->setPosition( ccp(size.width / 2, size.height - 50) );       //设置标签的位置

	// add the label as a child to this layer
	this->addChild(pLabel, 1);                                                                 //添加标签到布景

	// add "HelloWorld" splash screen"
	CCSprite* pSprite = CCSprite::spriteWithFile("HelloWorld.png");       //创建一个精灵 用图片

	// position the sprite on the center of the screen
	pSprite->setPosition( ccp(size.width/2, size.height/2) );               //设置精灵的位置

	// add the sprite as a child to this layer
	this->addChild(pSprite, 0);                                                                  //添加这个精灵
	
	return true;
}

void HelloWorld::menuCloseCallback(CCObject* pSender)             //关闭菜单的事件
{
	CCDirector::sharedDirector()->end();                                //调用导演的end方法

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
	exit(0);
#endif
}
分享到:
评论

相关推荐

    hello world hello world

    标题中的“hello world hello world”和描述中的“hello world”似乎是在引用计算机编程中的经典入门程序,通常用于演示一个语言的基本输出功能。在大多数编程语言中,“Hello, World!”是初学者编写的第一个程序,...

    开源项目-IPStreet-HelloWorld.zip

    在IPStreet-HelloWorld项目中,这个例子展示了如何通过API与IPStreet的专利分析服务进行交互。API(应用程序接口)是软件系统之间通信的一种方式,允许开发者利用服务提供商的功能来构建自己的应用程序。 首先,让...

    java_hello_world源代码工程.rar

    2. 在项目中新建一个Java类,命名为 `HelloWorld`。 3. 将上述代码粘贴到类中。 4. 保存文件后,IDE会自动编译源代码(如果没有开启自动编译,需要手动编译)。 5. 可以通过IDE的运行功能或命令行中的 `javac Hello...

    (1)--HelloWorld

    HelloWorld项目作为Cocos2d-x的学习起点,是理解该框架基本结构和工作原理的重要案例。通过这个项目,我们可以了解Cocos2d-x的项目组织方式以及核心组件的功能。 #### 项目结构分析 - **平台相关文件夹**:项目的...

    struts2 helloworld

    "Struts2 HelloWorld"是学习Struts2框架的基础教程,通过这个例子,我们可以了解Struts2的基本配置和工作流程。 首先,让我们从项目结构开始。在"struts2_helloWorld"压缩包中,通常会包含以下几个关键文件: 1. *...

    creo二次开发helloworld

    2. **创建新项目**:在VS2010中,选择C++ Win32控制台应用程序模板,为“helloworld”创建一个新的项目。 3. **编写代码**:在源文件中,引入必要的CREO库,例如`#include "proe.h"`,并使用CREO的API函数,如`...

    JMX HelloWorld Download

    **标题解析:** "JMX HelloWorld Download" 指的是一个关于Java Management Extensions(JMX)的简单示例,可能是用于教学或演示如何在Java应用中使用JMX技术。"Download"表明这是一个可以下载的资源,可能包含了...

    springmvc_helloWorld

    在这个名为"springmvc_helloWorld"的项目示例中,我们将探讨如何利用Spring MVC实现一个简单的表单请求与响应。该项目旨在帮助初学者理解Spring MVC的核心概念和工作流程。 1. **Spring MVC 框架介绍** Spring MVC...

    masm汇编helloworld模板

    在`HelloWorld.asm`中,我们可能会看到类似以下的代码片段,用于打印"Hello, World!": ```assembly section .data hello db 'Hello, World!',0 section .text global _start _start: ; 设置段寄存器 mov ax,...

    abc 联系代码hello world hello world

    总结来说,虽然提供的信息有限,但我们可以联想到编程基础知识(如"hello world"),项目管理(如文档记录和测试阶段),以及数据处理工具(如Excel)在IT工作中的应用。在实际工作中,理解并掌握这些基本概念和技术...

    飞凌OK6410开发板helloworld应用程序

    在这个过程中,“NewHelloWorld”可能是指更新或改进后的“helloworld”程序,可能包含了更多的功能或者优化,以适应开发者的学习需求或者特定项目的开发要求。通过分析和实践这个新的版本,开发者可以进一步提高...

    Android系统源代码情景分析之HelloWorld应用程序

    在Android系统中,"HelloWorld"程序是每个开发者入门的标志性项目,它展示了如何构建一个基本的Android应用程序。本文将深入解析Android系统源代码中"HelloWorld"的应用场景,帮助你理解Android系统的运行机制和应用...

    认识Android入门的HelloWorld程序

    在Android Studio环境中打开一个`HelloWorld`项目,首先映入眼帘的是项目的主要组成部分。根据文章描述,项目主要由两个关键文件夹构成: 1. **app 文件夹**:该文件夹存放着应用程序的核心代码和资源文件。 - **...

    helloworld.rar

    标题 "helloworld.rar" 暗示我们正在处理一个压缩文件,它可能包含了一个简单的“Hello, World”程序,这是初学者在学习编程时经常遇到的第一个示例。这个压缩包包含两个文件:`GNUmakefile` 和 `helloworld.m`。...

    webgl-3d-helloworld

    在标签中,“webgl”强调了项目所使用的图形库,“3d”表示项目涉及3D图形,“javascript”明确了编程语言,“helloworld”通常是指初级教程或示例项目,“demo”则表明这是一个可以运行的实例。这些标签有助于理解...

    Android HelloWorld

    在Android开发领域,"HelloWorld"程序是每个初学者入门时的第一个项目,它标志着开发者向Android世界迈出的第一步。这个程序通常非常简单,但包含了Android应用开发的基本元素,让我们一起深入了解一下。 首先,...

    springmvc注解版 helloworld

    在这个"springmvc注解版 helloworld"项目中,我们将深入探讨如何使用注解来配置和实现一个简单的Hello World应用。这个项目特别适合初学者入门,因为每个步骤都有详细的注释,确保你能理解每一行代码的作用。 首先...

    helloworld spring mvc

    通过运行这个"helloworld spring mvc"项目,开发者可以了解Spring MVC的基本流程:从浏览器发送请求到DispatcherServlet,DispatcherServlet根据配置找到对应的Controller方法执行,然后Controller处理请求并返回一...

    springmvc项目helloworld

    在这个"springmvc项目helloworld"中,我们将深入理解Spring MVC的基本概念、工作原理以及如何创建一个简单的Hello World应用程序。 1. **Spring MVC 概述** - Spring MVC 是 Spring 框架为Web开发提供的模块,它...

    springmvc-maven-webapp-helloworld 源码

    通过分析这个"springmvc-maven-webapp-helloworld"项目,我们可以深入理解每个组件的作用,以及它们如何协同工作来构建一个完整的Web应用程序。同时,这也是一个很好的起点,可以帮助开发者逐步掌握SpringMVC、Maven...

Global site tag (gtag.js) - Google Analytics