1.物理系统PhysicsWorld,RayCast
1 3.0物理系统PhysicsWorld
|
T07PhysicsWorld.h |
|
#ifndef #define #include class { public: CREATE_FUNC(T07PhysicsWorld); bool Scene* }; #endif |
|
T07PhysicsWorld.cpp |
|
#include bool { Layer::init(); PhysicsBody* PhysicsBody* { //后面的三个参数值分别表示的是:密度,弹性值,摩擦力 PhysicsBody* bodyA = //创建精灵 Sprite* //设置 sprite->setPhysicsBody(body); addChild(sprite); //设置精灵的位置 sprite->setPosition(winSize.width //设置速度 body->setVelocity(Vect(100, } { PhysicsBody* bodyB = Sprite* addChild(sprite); sprite->setPhysicsBody(body); sprite->setPosition(winSize.width } { bodyA->setContactTestBitmask(0x1); bodyB->setContactTestBitmask(0x1); bodyA->setGroup(1); bodyB->setGroup(2); //设置精灵的 auto ev->onContactBegin CCLog("Began return }; _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, } { auto bodyB->getShapes().at(0)); ev->onContactBegin CCLog("Shape return }; _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, } { auto ev->onContactBegin CCLog("Group return }; _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, } return } |
|
TMenu.h |
|
#ifndef #define #include class { public: CREATE_FUNC(TMenu); bool bool }; #endif |
|
TMenu.cpp |
|
#include #include #include #include #include #include #include #include #include static "T01CPP11", "T02Vector", "T04Label", "T05Touch", "T06Box2D", "T07PhysicsWorld" }; bool { Layer::init(); Menu* addChild(menu); for (int { MenuItemFont* MenuItem* int Layer* if (title[i] if (title[i] if (title[i] if (title[i] if (title[i] if (title[i] if (l) { TBack* Scene* PhysicsWorld* world->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); s->addChild(b); s->addChild(l); Director::getInstance()->pushScene(s); } }); menu->addChild(item); item->setTag(1000 } menu->alignItemsVertically(); // auto #if 0 ev->onTouchBegan return }; #endif //ev->onTouchBegan = std::bind(&TMenu::TouchBegan, this, std::placeholders::_1, std::placeholders::_2); ev->onTouchBegan ev->onTouchMoved setPositionY(getPositionY() }; _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, return } bool { return } |
|
运行结果: |
射线的做法
|
T08RayCast.h |
||||||||||||||
|
#ifndef #define #include class { public: CREATE_FUNC(T08RayCast); bool void void Sprite* int int float PhysicsShape* DrawNode* }; #endif |
||||||||||||||
|
T08RayCast.cpp |
||||||||||||||
|
#include void { Layer::onEnter(); Scene* scene->getPhysicsWorld()->setGravity(Vec2(0, } bool { Layer::init(); // { Sprite* addChild(cat); cat->setPosition(winSize.width _cat = } // { auto ev->onTouchBegan //得到触摸点 Vec2 //创建一个圆形的PhysicsBody PhysicsBody* Sprite* sprite->setPhysicsBody(body); addChild(sprite); sprite->setPosition(pt); return }; _eventDispatcher->addEventListenerWithSceneGraphPriority(ev, } { _angle = 0; _distance = 100; _nearDis = _food = _drawNode = } scheduleUpdate(); return } void { Scene* PhysicsWorld* //获得猫的位置 Vec2 Vec2 //当前时刻扫描到的终点位置 end.x end.y // if (_drawNode) //下面的代码用于画线段 _drawNode = _drawNode->drawSegment(start, addChild(_drawNode); // //bool(PhysicsWorld& world, const PhysicsRayCastInfo& info, void* data) auto if (info.shape return //如果点包含猫的点 float if (dis { _nearDis = _food = } // return }; //通过rayCast画一条射线 world->rayCast(callback, //每次角度加2 _angle += 2; //如果角度为360 if (_angle { //如果存在食物 if (_food) { // Node* //将猫的的位置数值到新的位置 _cat->setPosition(node->getPosition()); node->removeFromParent(); _food = _nearDis = } _angle = 0; } } |
||||||||||||||
|
运行结果: 1 3.0物理系统PhysicsWorld
射线的做法
|
1.物理系统PhysicsWorld,RayCast的更多相关文章
- Atitit 游戏引擎---物理系统(1)------爆炸效果
Atitit 游戏引擎---物理系统(1)------爆炸效果 1.1. 动画框架的来源flex,jqueryuijs,anim , cocos2d 1 1.2. Jqueryui的特效库 1 1.3 ...
- 物理系统迁移虚拟化P2V技术
企业搭建虚拟化平台之后的第一件事肯定是将现有的服务器应用业务转移到虚拟服务器上,这就是虚拟化整合服务器的第一步,也是虚拟化程序的基础功能之一:P2V的转化功能. AD: 企业搭建虚拟化平台之后的第 ...
- nVidia的物理系统
PhysX PhysX(wiki en 中文,physx wiki physx wiki2)是nVidia公司一款跨平台实时物理引擎,可使用硬件(GPU.PPU: Physics Process ...
- Physics(物理系统)
物理: Physics Box2d Unity 内置NVDIA PhysX物理引擎 刚体:要使一个物体在物理控制下,简单添加一个刚体给它.这时,物体将受重力影响,并可以与其他 ...
- Unity物理系统的触发器
如何触发触发器函数? 触发器中相互的,当其中一个是触发器,两个物体进入碰撞,双方的触发器函数都会触发. 两个碰撞盒穿入? 解决办法:给其中一个添加刚体 触发器的物理配置 以上是个人理解,看过API之后 ...
- Unity3D学习笔记(四):物理系统碰撞和预制体
Rigidbody(刚体组件):加了此组件游戏物体就变成刚体了 ----Mass(质量,单位kg):重力G = 质量m * 重力加速度g(g=9.81 m/s^2) --------冲量守恒定理 动量 ...
- 【腾讯GAD暑期训练营游戏程序班】游戏中的物理系统作业说明文档
一.需求分析• 添加一辆新NPC车,可以让其与主角车碰撞:• 添加一些新物件,能够与车互动,在其触发事件将其移除:• 添加一些无法撞动的事件:• 添加NPC车的自动移动逻辑:• 在课上赛车的示例上添加 ...
- Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界
物理模拟是一个奇妙的事情,以此著名的游戏有愤怒的小鸟.我们在这节将会一起来了解如何设置重力,设置物理包围体,碰撞的检测. 要点: 设置物理检测的代理: 让主场景遵循SKPhysicsContactDe ...
- Unity Animation System(动画系统)
动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重) 带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画. ...
随机推荐
- c++类与对象(1)——构造,复制构造函数
CPP的类与对象: 当我们定义一个基本类型变量时,方法如下: int p; #定义一个int类型变量 bool b; #定义一个bool类型变量 float c ; #定义一个float类型变量 显然 ...
- 【JAVA】pdf转图片
最近java项目中使用到了pdf转图片的需求,在此记录一下. 1.基于GhostScript p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px ...
- SpringMVC 教程 - Controller
原文地址:https://www.codemore.top/cates/Backend/post/2018-04-10/spring-mvc-controller 声明Controller Contr ...
- [ZJOI 2010]count 数字计数
Description 题库链接 问你 \([l,r]\) 区间内所有整数中各个数码出现了多少次. \(1\leq a\leq b\leq 10^{12}\) Solution 数位 \(DP\) . ...
- allocator
allocator: 通常c++内存配置和释放操作是这样的: class Fo{}; Fo *p = new Fo; delete p; new算式主要有三个阶段: 调用::operator new配 ...
- class-map与policy-map 配置与qos模版
将subnet-a 与subnet-b 归入类class1 中.Router1(config)# ip access-list extended subnet-a Router1(config-std ...
- React Suite v3.0 正式版发布
React Suite v3.0 正式版发布 相信很多人会好奇,React Suite 是什么? React Suite 是 HYPERS 前端团队和 UX 团队开源的一套基于 React 的 UI ...
- LeetCode 2
No1 Given a sorted array and a target value, return the index if the target is found. If not, return ...
- Docker学习系列(一)Docker简介
简介 Docker是一个在全球范围领先的软件容器平台.开发人员可以使用容器来在协作过程中遇到的解决"不同环境配置"的问题.(例如,在传统的开发环境下,开发人员编写代码,然后交由测试 ...
- 常用java开发文档链接
使用java开源工具httpClient及jsoup抓取解析网页数据 : https://blog.csdn.net/lovoo/article/details/52674712 jsoup Cook ...