最终效果图:

一、新建工程
进入cocos2d-x的tools下的bin目录:
/Users/beyond/Desktop/cocos2d-x/cocos2d-x-3.3beta0/tools/cocos2d-console/bin目录

打开终端,切换到上述bin目录
使用cocos命令,创建工程,格式如下:
  • cocos new 工程名 -p 包名 -l 语言 -d 目标文件夹,
  • 例如 :

cocos new 01_cocos2d-x-p com.beyond-l cpp -d /Users/beyond/Desktop/cocos2d-x/cocos2d-x学习

进入创建好的工程目录,打开工程
二、BallScene.h,实质是继承自Layer
//
//  BallScene.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-3.
//
//

#ifndef ___1_cocos2d_x__BallScene__
#define ___1_cocos2d_x__BallScene__

#include "cocos2d.h"
USING_NS_CC;
// 注意 这儿,继承的是 Layer
class BallScene : public cocos2d::Layer
{
private:
    // 屏幕尺寸
    Size winSize;
public:
    // c++里面没有id类型,所以 返回类的实例对象的 指针
    static cocos2d::Scene* createScene();
    // 以下是 不同点:cocos2d-x的 'init' 方法 返回 bool
    // 而cocos2d-iphone 返回 'id' 类型
    virtual bool init();
    // 宏 自动实现 "静态的 create()方法"
    CREATE_FUNC(BallScene);
    
    // 重写一个方法
    virtual void onEnter();
    // 自定义方法,创建一个应用程序边界
    void addBoundry();
    // 自定义方法,添加一个ball
    void addBall(float x,float y);
    // 自定义方法,添加一个ball
    void addBall(Vec2 point);

    
};


#endif /* defined(___1_cocos2d_x__BallScene__) */


三、 BallScene.cpp类实现
//
//  BallScene.cpp
//  01_cocos2d-x
//
//  Created by beyond on 14-10-3.
#include "BallScene.h"
USING_NS_CC;
Scene* BallScene::createScene()
{
    // 'scene' 自动释放
    // 重点,创建一个,具有物理引擎世界的scene
    auto scene = Scene::createWithPhysics();
    // 重点,绘制调试信息
    scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
    
    // 'layer' 自动释放
    auto layer = BallScene::create();
    // 将图层 添加到场景中
    scene->addChild(layer);
    // 返回 填充好图层的 场景
    return scene;
}

// 在 "init" 方法中,实例化自己要用的精灵对象
bool BallScene::init()
{
    // 1. 调用父类的init,cpp 没有super,直接写父类名
    if ( !Layer::init() ) return false;
    // 屏幕尺寸
    winSize = Director::getInstance()->getVisibleSize();
    

    // cocos2d-3.x 可以快速创建 物理body
    // setPhysicsBody(<#cocos2d::PhysicsBody *body#>
    return true;
}
#pragma mark - 重写父类方法
void BallScene::onEnter(){
    // 1、先执行父类的onEnter
    Layer::onEnter();
    // 2、调用 自定义方法,创建一个应用程序边界
    addBoundry();
    // 3、调用 自定义方法,添加一个ball
    addBall(winSize.width/2,winSize.height/2);

    // 4、实例化一个触摸监听器 对象
    auto listener = EventListenerTouchOneByOne::create();
    // 当触摸开始时,绑定一个闭包函数;
    // 【】表示 要传入的外界对象,此处是this
    // ()表示参数
    listener->onTouchBegan = [this](Touch *t,Event *e){
        // 点击就创建一个Ball
        // getLocation 返回一个OpenGL坐标
        this->addBall(t->getLocation());
        return false;
    };
    // 5、获取事件分发器,添加一个事件监听器,到this身上;即监听的是this对象【整个图层Layer】
    Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(listener,this);
    
}
#pragma mark - 自定义方法
// 自定义方法,创建一个应用程序边界
void BallScene::addBoundry(){
    // 指定size,创建一个物理body
    auto b2Body = PhysicsBody::createEdgeBox(winSize,PHYSICSBODY_MATERIAL_DEFAULT,5);
    // 创建一个显示用的精灵
    auto boundry = Node::create();
    boundry->setPosition(winSize.width/2,winSize.height/2);
    // 为精灵 设置物理body
    boundry->setPhysicsBody(b2Body);
    // 添加精灵到当前 Layer
    this->addChild(boundry);
}
// 自定义方法,添加一个ball
void BallScene::addBall(float x,float y)
{
    auto ball = Sprite::create("ball.png");
    ball->setPosition(x,y);
    // 指定size,创建一个物理body
    auto b2Body = PhysicsBody::createBox(ball->getContentSize());
    // 为精灵 设置物理body
    ball->setPhysicsBody(b2Body);
    // 添加精灵到当前 Layer
    this->addChild(ball);
}
// 自定义方法,添加一个ball
void BallScene::addBall(Vec2 point)
{
    addBall(point.x,point.y);
}

cocos2d_x_02_使用内置物理引擎的更多相关文章

  1. ios – 仅用于碰撞检测,Chipmunk或Box2d是更好的工具吗?

    对于基于Cocos2d的项目,我只想使用物理工具包进行碰撞检测.使用Chipmunk或Box2d有什么优缺点?解决方法我们在谈论什么样的碰撞?根据什么使你更容易使用你的决定而不是一个任意的,未定义的,高度主观的关于一个物理引擎是否比另一个更好的想法,因为技术差异是微不足道的,你只能评估他们对如果你们都知道你自己的游戏设计和物理引擎内部算法,你的游戏设计真的很好.

  2. Swift中的UIKit重力学

    实例化UIDynamicAnimator时,它的构造函数需要传入一个referenceView参数,用于告知它要跟踪并制定坐标的View。collision.translatesReferenceBoundsIntoBoundary=true//为碰撞效果中添加一个隐形的边界。UITouchsnap=UISnapBehavioranimator.addBehavior}//自定义行为:UIDynamcItemBehaviorletitemBehavIoUr=UIDynamicItemBehaviorite

  3. Swift中的UIKit动力学

    添加重力行为在ViewController.swift文件中添加两个属性://UIKit物理引擎varanimator:UIDynamicAnimator!在UIKit的重力世界中,计算重力加速度的公式是一样的,但是单位有所不同。从上面代码我可以注意到collision.translatesReferenceBoundsIntoBoundary=true;这行代码,它的意思是将UIDynamicAnimator引用的View的边界作为碰撞行为的触发边界,这样就不用我们再去设置边界的坐标了,非常好用。

  4. 早期Swift中Cocos2D初始化代码的重构

    但是遗憾的是Swift2.2中还是不支持Type的class属性关键字,只能用static,我们期待Swift3的改进吧!

  5. 手把手教你swift项目添加cocos2dx-lua

    去倒杯水吧,这个过程会很久。。。至此,工程已经全部配置完毕,你已经解决一个大Boss了;今天就到这里吧,之后我们再续如何用swift调用lua手把手教你swift项目添加cocos2dx-lua

  6. 手把手教你swift项目集成cocos2dx-js模块

    前几天在swift项目中集成了Lua模块,使得在swift工程中用Lua写游戏逻辑成为了可能,具体工程及配置见手把手教你swift项目添加cocos2dx-lua,由于公司最近要把js做的小游戏集成到iOS原生应用中,于是我们将解锁另外一个场景,好了,下面开始;同样的,首先你得有一个swift项目我们从头开始,建立一个swift项目;我们默认你已经可以自己创建一个全新的swift项目了,这很简单,不是么?

  7. android – 尝试在Cocos2d-X C中设置一个带整数的CCLabelTTF作为它的字符串的一部分

    所以在使用Cocos2d的Objective-C中,我使用带有格式的NSMutableString将变量(得分)放入字符串中.我拿这个字符串并使用cclabel将它放在屏幕上.使用Cocos2D-x,我很难找到获得此结果的方法.一个简单的例子就是很棒.谢谢!

  8. 怎样在CocosCreator中使用物理引擎关节

    这篇文章主要介绍了怎样在CocosCreator中使用物理引擎关节,对物理引擎感兴趣的同学,着重要看一下

  9. 正则式代码转换程序,用于cocos2d-x不同版本之间程序移植

    如果开发环境没有反射功能,代码改名的工作量不小,下面代码实现了批量替换变量名称。修改可用于代码转换的许多情况。本文中用于cocos2d-x不同版本之间程序移植。

  10. xcode – 如何修复“是一个动态库,没有添加到静态库”警告?

    我刚刚升级到Xcode5.1,突然间出现了一个新的警告:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool:file:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/D

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部