cocos2dx3.x中使用物理引擎还是挺方便的
世界杯期间做个接地气的
平时创建场景
1 |
local scene = cc.Scene:create() |
改成
1 |
local scene = cc.Scene:createWithPhysics() |
这样的场景就是带物理世界的场景了
设置重力
1 |
scene:getPhysicsWorld():setGravity(cc.vertex2F(0,-1000)) |
声明层
1 |
local layer = cc.LayerColor:create(cc.c4f(255,255,255,255)) |
声明一个函数,作用是点一下屏幕在当前位置丢下一个足球
1 2 3 4 5 6 7 8 9 10 |
local function onTouch(touch,event) local location = touch:getLocation() local x,y = location.x,location.y local football = cc.Sprite:create("football.png") local size = football:getContentSize() football:setPosition(x,y) football:setPhysicsBody(cc.PhysicsBody:createCircle(size.width/2)) football:getPhysicsBody():setVelocity(cc.vertex2F(0,300)) layer:addChild(football) end |
声明一个触摸监听器,并和层绑定
1 2 3 |
local listener = cc.EventListenerTouchOneByOne:create() listener:registerScriptHandler(onTouch,cc.Handler.EVENT_TOUCH_BEGAN) layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listener,layer) |
创建物理世界边界
1 2 3 4 |
local edge = cc.Node:create() edge:setPhysicsBody(cc.PhysicsBody:createEdgeBox(visibleSize)) edge:setPosition(visibleSize.width/2,visibleSize.height/2) layer:addChild(edge) |
层添加到场景里
1 |
scene:addChild(layer) |
这样就算完成了,点一下出现一个足球还会和其他足球碰撞