今天打算用BOX2D物理引擎, 我想我以前听说过一些时间cocos2d-X在3.0版本封装自己的物理引擎Physics, 听名字很霸气量, 这的确是一个比BOX2D非常多( 毕竟是基于BOX2D封装的嘛), 好了, 如今我们来看看怎样使用Physics这个物理引擎,

第一步: 创建项目............略

第二部: 改动场景的创建方式

将Scene::create();换成Scene::createWithPhysics();

Scene* HelloWorld::createScene()
{
//使用物理世界创建场景
auto scene = Scene::createWithPhysics(); //显示物理世界调试状态, 显示红色的框, 方便调试
scene->getPhysicsWorld()->setDebugDrawMask( PhysicsWorld::DEBUGDRAW_ALL); auto layer = HelloWorld::create(); scene->addChild(layer); return scene;
}

第三部: 在onEnter()里面创建一个世界盒子

void HelloWorld::onEnter()
{
Size visibleSize = Director::getInstance()->getVisibleSize(); //创建一个物理世界, 大小和屏幕的尺寸同样, 使用默认材质, debug框的宽度为3个像素
auto body = PhysicsBody::createEdgeBox( visibleSize, PHYSICSBODY_MATERIAL_DEFAULT, 3); //创建一个碰撞图形
auto edgeShape = Node::create(); //将图形和刚刚创建的世界绑定
edgeShape->setPhysicsBody( body); //设置图形的位置在屏幕正中间
edgeShape->setPosition( visibleSize.width / 2, visibleSize.height / 2); //加入进图层
addChild( edgeShape);
}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

看看, 一个和我们屏幕大小一样的物理世界就创建成功了

第四部: 加入一个物理精灵

我们写一个函数吧

void HelloWorld::addSprite( cocos2d::Vec2 pos)
{
auto body = Sprite::create( "CloseNormal.png"); //设置一个正方形绑定在精灵上面
body->setPhysicsBody( PhysicsBody::createBox( body->getContentSize())); body->setPosition( pos); addChild( body);
}

我们在init()里面调用这个函数, 并将这个精灵设置在屏幕的正中间

addSprite( Vec2( visibleSize.width / 2, visibleSize.height / 2));

看看效果, 是不是一个东西在往下落, 速度还越来越快

额, 这个图形貌似是个圆形的, 我们还是创建一个圆形的碰撞图形吧, 将

body->setPhysicsBody( PhysicsBody::createBox( body->getContentSize()));

改为

body->setPhysicsBody( PhysicsBody::createCircle( body->getContentSize().width / 2));

看, 我们创建的图形是不是就是一个圆形了

额, 这样看起来好无趣, 我们再做一个事件监听吧, 点一个出来一个, 这样应该会比較好玩

在init()里面

	//创建单点触摸事件监听
auto listener = EventListenerTouchOneByOne::create(); //触发触摸開始事件时进行的操作
listener->onTouchBegan = [this](Touch* t, Event* e)
{
this->addBall( t->getLocation().x, t->getLocation().y); return false;
}; //绑定监听对象
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority( listener, this);

好了, 大功告成了

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

版权声明:本文博客原创文章,博客,未经同意,不得转载。

大约cocos2d-X 3.x使用引擎版本自带的物理引擎Physics的更多相关文章

  1. Chrome浏览器的版本查看 以及V8 javascript 引擎版本查看

    1. 发现chrome浏览器最新版本里面带的V8 引擎 版本号与chrome的版本号有一个关系, 这里简单总结一下: 在地址栏里面输入: chrome://version 即可显示出来 比如我正在使用 ...

  2. [原创]cocos2d-x研习录-第三阶 特性之物理引擎

    游戏物理引擎是指在游戏中涉及物理现象的逻辑处理,它用于模拟现实世界的各种物理规律(如赛车碰撞.子弹飞行.物体掉落等),让玩家能够在游戏中有真实的体验. Cocos2D-x中支持Box2D和Chipmu ...

  3. [Cocos2D-x For WP8]Box2D物理引擎

    物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动.旋转和碰撞反映.为每个游戏使用物理引擎并不是完全必要的—简单的“牛顿”物理(比如加速和减速)也可以在一定程度上通过编程或编写脚本来实现.然而, ...

  4. HTML5之2D物理引擎 Box2D for javascript Games 系列 第一部分

    我要的是能在H5页面上跑的javascript版的Box2D啊!!! 最近想学习Javascript版本的Box2D JS物理引擎,无奈搜了半天也没找到相对比较系统的资料 官方网站也只是简单的介绍,A ...

  5. cocos2dx-3.x物理引擎Box2D介绍

    理引擎 Cocos2d-x引擎内置了两种物理引擎,它们分别是Box2D和Chipmunk,都是非常优秀的2D物理引擎,而且x引擎将它们都内置在SDK中.Box2D使用较为广泛,在这里选择Box2D来进 ...

  6. Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里

    添加Chipmunk物理引擎在我们的游戏世界里         一.简介                   cocos2d JS能给我们力量来创造令人印象深刻的游戏世界.但缺乏某种现实.       ...

  7. 一个使用物理引擎的WebGL3D场景

    这是一个类似第三人称射击游戏(TPS)的3D场景,可以通过https://ljzc002.github.io/FPS2/index.html访问.场景运行效果如下图: 场景环境由一个天空盒和一个地面网 ...

  8. C++ 3D物理引擎库BulletPhysics基本使用

    前言:最近在接触OpenGl和DX11的时候,顺便学习了Bullet这个3D物理引擎的基本使用,记录一下. |BulletPhysics介绍 BulletPhysics是一个跨平台的开源物理引擎,也是 ...

  9. Egret中使用P2物理引擎

    游戏中的对象按照物理规律移动,体现重力.引力.反作用力.加速度等物体特性,实现自由落体.摇摆运动.抛物线运动,以及物理碰撞现象的模拟.用于模拟物理碰撞.物理运动的引擎称为物理引擎. 来自瑞典斯德哥尔摩 ...

随机推荐

  1. poj3667(线段树)

    题目连接:http://poj.org/problem?id=3667 题意:1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 2 a b:将[a,a+b-1]的房间清空 线段树操作:upd ...

  2. auto_ptr and scoped_ptr

    #include "boost/scoped_ptr.hpp" #include <iostream> #include <memory>//contain ...

  3. jar包有嵌套的jar的打包成jar的方法

    1.先写一个类,将其打包成jar包. 代码如下: package com.wjy.jar; public class GetUserName { public String getUserName() ...

  4. Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例

    Linux下Oracle11G RAC报错:在安装oracle软件时报file notfound一例 1.现象 之前安装一切都比較顺利,安装oracle软件时,进度到30%时报错:file not f ...

  5. ACdream原创群赛(18)のAK's dream题解

    只做了4题水题ADGI A题需要注意的就是“[...]”的输出了,何时输出,何时不输出. #include <stdio.h> int main() { int n, cur, d; ; ...

  6. Three.js 3D打印数据模型文件(.STL)载入中

    3DPrint是现在和未来10年度科技产品的主流之中.广泛的. 对于电子商务类3D打印网站.一个主要功能就是商品3D呈现的方式,那是,3D数据可视化技术. HTML5(WebGL)它可以用于构建3D查 ...

  7. 鸟书shell 学习笔记(一) shell专注于概念和命令

    变量   variableName=value 等号左右不能有空格 变量内容有空格须要用"或者'括起来,可是 v="hello $name" $保持原有功能,单引號则不行 ...

  8. 教你使用破解无线路由器笔记本password

    近期非常多人问我怎么破解WiFipassword…看来大家都对免费的东西比較有兴趣.要么也可能是我太招摇了…囧… 好吧,我就写篇小小的教程,看完后,你应该可以破解大部分无线路由器password了.写 ...

  9. 比量iOS6/iOS7, 3.5inch/4.0inch

    Retina (3.5/4 inch Screen) or Non-Retina 比量 if ([[UIScreen mainScreen] respondsToSelector:@selector( ...

  10. DV工作流