Cocos2d-x的学习之旅三自己的 HelloWorld

声明

本教程仅用于初学cocos2dx同学使用,内容由本人(Code-Man)编写,此教程使用cocos2dx版本为3.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。QQ群:Cocos2d-CodeMonkey,461679592

经过上一节课相信Monkey们对Cocos2dx的HelloWorld有一定的了解了。如果还不能理解,就赶快加入我们的QQ群吧,期待与你一起成长。今天的任务很明显,写一个自己的HelloWorld,想写点特别点的。与自带的HelloWorld有所区别,但又不能超出一定的知识范围,为此我也挺头痛的!!! 求安慰!!!,经过我日思夜想,天天不能寝,夜夜不能寐最后想到了,我们要完成一个伟大的壮举。创建夏娃和亚当。。。。不要问为什么,技术宅任性。
为什么是《罪恶王冠》? ??? 因为我前几天刚追完。让我发泄一下!! 我的楪祈女神。。。至于跟夏娃亚当有什么关系??不懂的自己补番。。。

【一】添加资源

本文以Xcode为列。下图就是我们的一个项目包的大概的一个结构
1.添加资源到资源文件

2.资源导入到项目

回到工程,资源文件右键Add Files to “MyCppGame”

Add到工程

完成结果,注意!!! 图片一定是PNG格式!!!

【二】场景构建

1.创建第一个C++文件,New File...
2.Next C++文件
3.文件名
4.头文件
我们先来理一理,我们需要做的事情。
①.创建场景--->创建层---》创建两个按钮
②.两个按钮:一个能添加我们的主角到我们场景中,一个能删除我们的主角们(这么可爱都舍得删,太可恶了!! 23333)
③.需要一串文字来指导我们的操作
如图:
建议:Monkey们先按照这个思路自己写一些。无论写成什么样都可以。。。。

【三】代码分析

本文知识点:

①Tag值和Name值

②节点与节点之间的关系

③Lable的使用注意事项


最后,我们只要执行我们的场景就好了,在哪呢???
打开 Appelegate.cpp文件



附上源码:
  

<pre name="code" class="cpp">
</pre><pre name="code" class="cpp">//
//  LessonOneScene.h
//  MyCppGame
//
//  Created by He_bi on 15/6/4.
//
//

#ifndef __MyCppGame__LessonOneScene__
#define __MyCppGame__LessonOneScene__

#include <stdio.h>
#include <cocos2d.h>
USING_NS_CC;

class LessonOneScene : public Layer {

public:
    
    //创建场景
    static Scene* createScene();
    
    //初始化函数
    virtual bool init();
    
    //用宏去创建一个层(自己)
    CREATE_FUNC(LessonOneScene);
    
private:
    
    //删除按钮的回调
     void menuRemoveCallback(cocos2d::Ref* pSender);
    
    //添加按钮的回调
     void menuAddCallback(cocos2d::Ref* pSender);
    
private:
    
    //一个英雄节点
    Node* HeroNode;
    
    //按钮层
    Menu* MyMenu;
    
    //屏幕大小
    Size WinSize;
};
#endif /* defined(__MyCppGame__LessonOneScene__) */

//
//  LessonOneScene.cpp
//  MyCppGame
//
//  Created by He_bi on 15/6/4.
//
//

#include "LessonOneScene.h"

//这个函数在此次不累赘、越往后面,对于前面的知识不会做无谓的讲解。
//忘记的可以复习前面的只是
Scene* LessonOneScene::createScene(){
    auto Myscene=Scene::create();
    
    auto MyLayer=LessonOneScene::create();
    
    Myscene->addChild(MyLayer);
    
    return Myscene;
}


bool LessonOneScene::init(){
    if (!Layer::init()) {
        return false;
    }
    
    WinSize=Director::getInstance()->getVisibleSize();
    
    //创建我们的背景图片
    auto bg=Sprite::create("LessonOne_Bg.png");
    
    //WinSize/2 这种写法是3.0之后才有的,是不是很方便
    bg->setPosition(WinSize/2);
    
    //这个这样理解吧,“别名”,也就是这个对象的另一个名字。例如:张三,别名:Monkey,哈哈哈!
    bg->setName("bg");
    this->addChild(bg);
    
    
    //按钮控件,还记得上一节课的那个按钮吗?那个使用图片作为按钮,现在我们使用的是文字按钮
    auto AddMenItem=MenuItemFont::create("添加按钮",CC_CALLBACK_1(LessonOneScene::menuAddCallback,this));
    AddMenItem->setPosition(WinSize.width/2,WinSize.height/2/2);
    
    auto RemoveMenItem=MenuItemFont::create("删除按钮",CC_CALLBACK_1(LessonOneScene::menuRemoveCallback,this));
    RemoveMenItem->setPosition(WinSize.width/2,WinSize.height/2+WinSize.height/2/2);
    
    //把按钮都添加到Men层上
    MyMenu=Menu::create(AddMenItem,RemoveMenItem,NULL);
    
    // Vec2::ZERO= Vec2(0,0),3.0后的写法,直接变成静态变量
    MyMenu->setPosition(Vec2::ZERO);
    this->addChild(MyMenu);
    
    /**
     还记得我们上一节课,是如何创建helloWorld文字的吗?
     Label::createWithTTF("Hello World","fonts/Marker Felt.ttf",24);
    这是上一节课创建方式。是不是稍微不一样?到底哪里不一样呢?其实看函数名可以很好的理解。
     WithTTF:依靠着TTF(True Type File 字型文件),Marker Felt.ttf(不包含中文)
     WithSystemFont:跟随着系统的文字。
     所有如果我们使用上一节课的方式创建,是看不到中文的
     */
    auto MyLabel=Label::createWithSystemFont("请添加主角","宋体",43);
    MyLabel->setPosition(WinSize.width-MyLabel->getContentSize().width,WinSize.height/2);
    //Node的常用函数,设置一个Node的颜色,但如果我们直接创建一个Node而不是它的子类然后设置颜色会怎么样呢?留给大家耍一耍
    MyLabel->setColor(Color3B(255,0));
    //这个,跟名字一样而是对象的另一个名字,好比人的身份证
    MyLabel->setTag(10000);
    bg->addChild(MyLabel,2);
    
    return true;
}

void LessonOneScene::menuAddCallback(cocos2d::Ref *pSender){
//    在主角节点为空的适合我们就去招呼出我们的萌萌哒的主角
    if (HeroNode==nullptr) {
        
//        创建我们的空节点,理解为容器吧,可以装很多东西
        HeroNode=Node::create();
        this->addChild(HeroNode);
//       出来吧男主角
        auto LessonOne_Boy=Sprite::create("LessonOne_Boy.png");
        auto BoySize=LessonOne_Boy->getContentSize();
        LessonOne_Boy->setPosition(BoySize.width/2,WinSize.height/2/2);
//        装到容器里面
        HeroNode->addChild(LessonOne_Boy);
        
//        出来吧女主角
        auto LessonOne_Gril=Sprite::create("LessonOne_Gril.png");
        auto GrilSize=LessonOne_Gril->getContentSize();
        LessonOne_Gril->setPosition(GrilSize.width/2,WinSize.height/2+WinSize.height/2/2);
        HeroNode->addChild(LessonOne_Gril);
        
//      this是谁?自己,自己是什么?,层,层有一个儿子它的别名叫“bg”,“bg”有一个儿子它的身份证是10000。结合上面就能找到最后哪个人就是:上面的MyLabel
        auto MyLabel=(Label*)this->getChildByName("bg")->getChildByTag(10000);
//        重新设置显示的文字
        MyLabel->setString("请删除我们的\n英雄");
    }else{
//        打一个log出来可以在控制台看见
        log("这个Node已存在,无需重复添加");
    }
  
}

void LessonOneScene::menuRemoveCallback(cocos2d::Ref *pSender){
    
//  只要我们的容器不为空,我们就继续执行
    if (HeroNode !=nullptr) {
//        我们并没有主动去删除男女主角,而是通过删除它的父节点,也就是主角的容器。
        HeroNode->removeFromParentAndCleanup(true);
        HeroNode=nullptr;
        auto MyLabel=(Label*)this->getChildByName("bg")->getChildByTag(10000);
//        再次更改它的文字
        MyLabel->setString("请添加我们的\n英雄");
    }else{
        log("这个Node删除,无需重复删除");
    }
}








资源下载地址: http://pan.baidu.com/s/1gdvTiTX

Monkey们下次见吧!!!!最近一直在干项目。。。心好塞。。。

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

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是