cocos2d-lua物理
2018-03-01 17:38
176 查看
写了最基本的物理碰撞和拖动刚体
带包围盒的效果:
不带包围盒的效果:
代码如下:
带包围盒的效果:
不带包围盒的效果:
代码如下:
local Scene = class("Scene",function() return cc.Scene:createWithPhysics() -- 物理场景 end) function Scene:ctor() local layer = cc.Layer:create() self:addChild(layer) -- 世界大小 self.visibleSize = cc.Director:getInstance():getVisibleSize() -- 设置物理世界重力 local gravity = cc.p(0,-1000) self:getPhysicsWorld():setGravity(gravity) -- 物理世界显示包围盒 self:getPhysicsWorld():setDebugDrawMask(cc.PhysicsWorld.DEBUGDRAW_ALL) -- cc.PhysicsWorld.DEBUGDRAW_ALL显示包围盒 cc.PhysicsWorld.DEBUGDRAW_NONE不显示包围盒 -- 创建物理边框 local edgeBody = cc.PhysicsBody:createEdgeBox( self.visibleSize, cc.PhysicsMaterial( 1,1 ,0), 3) local edgeNode = cc.Node:create() layer:addChild( edgeNode) edgeNode:setPosition( self.visibleSize.width * 0.5 , self.visibleSize.height * 0.5 ) edgeNode:setPhysicsBody( edgeBody) -- 材质类型 local MATERIAL_DEFAULT = cc.PhysicsMaterial(0.1, 0.5, 0.5) -- 密度、碰撞系数、摩擦力 -- 球 local ball = cc.Sprite:create("btn-a-0.png") -- 刚体 local body = cc.PhysicsBody:createBox(ball:getContentSize(), MATERIAL_DEFAULT) -- 刚体大小,材质类型 -- 设置球的刚体属性 ball:setPhysicsBody(body) -- 设置球的刚体 ball:setPosition(display.center) layer:addChild(ball) -- 触摸事件 local function onTouchBegan(touch, event) local location = touch:getLocation() local arr = self:getPhysicsWorld():getShapes(location) local body = nil for _, obj in ipairs(arr) do if obj:getBody() then body = obj:getBody() end end if body then local mouse = cc.Node:create() local physicsBody = cc.PhysicsBody:create(PHYSICS_INFINITY, PHYSICS_INFINITY) mouse:setPhysicsBody(physicsBody) physicsBody:setDynamic(false) mouse:setPosition(location) layer:addChild(mouse) local joint = cc.PhysicsJointPin:construct(physicsBody, body, location) joint:setMaxForce(5000.0 * body:getMass()) cc.Director:getInstance():getRunningScene():getPhysicsWorld():addJoint(joint) touch.mouse = mouse return true end return false end local function onTouchMoved(touch, event) if touch.mouse then touch.mouse:setPosition(touch:getLocation()) end end local function onTouchEnded(touch, event) if touch.mouse then layer:removeChild(touch.mouse) touch.mouse = nil end end 9769 local touchListener = cc.EventListenerTouchOneByOne:create() touchListener:registerScriptHandler(onTouchBegan, cc.Handler.EVENT_TOUCH_BEGAN) touchListener:registerScriptHandler(onTouchMoved, cc.Handler.EVENT_TOUCH_MOVED) touchListener:registerScriptHandler(onTouchEnded, cc.Handler.EVENT_TOUCH_ENDED) local eventDispatcher = layer:getEventDispatcher() eventDispatcher:addEventListenerWithSceneGraphPriority(touchListener, layer) return Scene
相关文章推荐
- [Cocos2d-x v3.x官方文档]纹理缓存
- Cocos2D-x游戏开发之十五:CCTMXTiledMap地图的基础实例
- 安装Cocos2D-iPhone的方法
- cocos2d-x 中文支持问题
- cocostudio与cocos2d-js的导入问题
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第六节:VS基础:树木的摇动
- Cocos2d-x游戏中默认的AndroidManifest.xml的解析
- cocos2d-x C++的do...while(0)解释
- cocos2d-x初探学习笔记(13)--内存回收机制
- cocos2d-x 自定义场景和场景跳转
- cocos2d-x3.2中将XCode开发的工程转移至VS2010中可能会出现的错误
- quick-cocos2d-x中Lua调用JAVA
- 转载自笨木头的Cocos2d-x Auto-batching分析
- cocos2d 帧动画1
- cocos2d-x学习笔记16:记录存储1:CCUserDefault 推荐
- Cocos2d-x Tiled Map Editor(三)
- cocos2d-x 2.v 新建工程
- Cocos2d相关图书推荐
- cocos2dJS之接入微信公众JSSDK
- cocos2d-x ios 设置横屏/竖屏(全)