PR

物理シミュレーション

Cocos Code IDEとLua言語を使ったサンプルコードと例文集です。

物理シミュレーションは物体同士の衝突時の振る舞いや、重力による落下など、物理法則をシミュレーションするものです。

サンプルコード

プロジェクトの新規作成で作成されるGameScene.luaファイルを下記のサンプルコードと書き換えます。 実行して画面をタッチすると、タッチした場所に四角いスプライトが作成され、落下していきます。

四角い画像をbox.pngの名前で作成し、resディレクトリに追加しています。
box.pngbox.png

require "Cocos2d"
require "Cocos2dConstants"

local GameScene = class("GameScene",function()
    return cc.Scene:createWithPhysics()
end)

function GameScene.create()
    local scene = GameScene.new()

    scene:getPhysicsWorld():setDebugDrawMask(cc.PhysicsWorld.DEBUGDRAW_ALL) -- デバッグ表示用(任意)

    local visibleSize = cc.Director:getInstance():getVisibleSize()

    -- 画面と同じサイズのノードを作ります
    local node = cc.Node:create()
    node:setAnchorPoint(0.5, 0.5) -- アンカーポイントを設定しないとwarningが出る
    node:setPosition(visibleSize.width/2, visibleSize.height/2)
    scene:addChild(node)

    -- 物体を作成し、四角いエッジの形を割り当てます
    local body = cc.PhysicsBody:create()
    local rectangle = cc.PhysicsShapeEdgeBox:create(cc.size(visibleSize.width, visibleSize.height))
    body:addShape(rectangle)
    body:setDynamic(false) 
    node:setPhysicsBody(body)  

    -- タッチイベントで呼ばれる関数
    local function onTouchBegan(touch, event)
        local location = touch:getLocation()

        -- スプライトを作る
        local sprite = cc.Sprite:create("box.png")
        sprite:setPosition(location)
        scene:addChild(sprite)

        -- 同型の物体を割り当てる
        local physicsBody = cc.PhysicsBody:createBox(sprite:getContentSize())
        sprite:setPhysicsBody(physicsBody)
    end

    -- タッチイベントの登録
    local listener = cc.EventListenerTouchOneByOne:create()
    listener:registerScriptHandler(onTouchBegan, cc.Handler.EVENT_TOUCH_BEGAN )
    local eventDispatcher = scene:getEventDispatcher()
    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, scene)

    return scene
end

return GameScene

ss_physics.png

詳細はQiitaに投稿してありますのでそちらを参照してください。

Qiita:物理シミュレーション基本(Cocos Code IDE, Lua言語)

Copyright(C) 2014 - 2015 「Cocos Code IDEとLua言語でゲームを作る」逆引き辞典for Lua All rights Reserved.