Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(點擊移動測試)

Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(點擊移動測試)

編輯:關於Android編程

Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(點擊移動測試)

本篇博客介紹Cocos2d-x 3.2Lua示例中點擊移動的例子,在這個例子你可以得到如何創建單點觸摸的事件和注冊事件監聽回調方法。
\


示例代碼:
--[[
ClickAndMoveTest.lua
點擊與移動
]]--

-- 獲取屏幕尺寸
local size = cc.Director:getInstance():getWinSize()
local layer = nil -- 層
local kTagSprite = 1 --精靈標記

local function initWithLayer()
    local sprite = cc.Sprite:create(s_pPathGrossini)


    -- 添加顏色層,黃色
    local bgLayer = cc.LayerColor:create(cc.c4b(255,255,0,255))
    layer:addChild(bgLayer, -1)
    
    -- 添加
    layer:addChild(sprite, 0, kTagSprite)
    -- 設置精靈位置到(20,150)
    sprite:setPosition(cc.p(20,150))
    -- 執行跳的動作,第一個參數為持續時間,第二個參數為位置,第三個參數為跳的高度,第四個參數跳的次數  
    sprite:runAction(cc.JumpTo:create(4, cc.p(300,48), 100, 4))

    -- 背景層執行無限重復的動作序列,先淡進,再淡出
    bgLayer:runAction(cc.RepeatForever:create(cc.Sequence:create(
                                                 cc.FadeIn:create(1),
                                                 cc.FadeOut:create(1))))

    -- 觸摸開始
    local function onTouchBegan(touch, event)
        return true
    end

    -- 觸摸結束
    local function onTouchEnded(touch, event)
        -- 獲取點擊位置
        local location = touch:getLocation()
        
        -- 根據標記獲取子節點
        local s = layer:getChildByTag(kTagSprite)
        s:stopAllActions()-- 停止所有動作
        -- 執行移動動作,移動到點擊的位置
        s:runAction(cc.MoveTo:create(1, cc.p(location.x, location.y)))
        local posX, posY = s:getPosition() -- 獲取精靈的位置
        local o = location.x - posX -- X軸的距離
        local a = location.y - posY -- Y軸的距離
        local at = math.atan(o / a) / math.pi * 180.0 --求角度 ,反正切函數求弧度/π*180.0
        --1弧度= 180/π, 1度=π/180

        -- 點擊位置在下邊
        if a < 0 then
            -- 點擊位置在左邊
            if o < 0 then
                at = 180 + math.abs(at)
            else
            -- 點擊位置在右邊
                at = 180 - math.abs(at)
            end
        end
        -- 執行旋轉的動作
        s:runAction(cc.RotateTo:create(1, at))
    end


    -- 單點觸摸的監聽器
    local listener = cc.EventListenerTouchOneByOne:create()
    -- 注冊兩個回調監聽方法
    listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
    listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
    local eventDispatcher = layer:getEventDispatcher()-- 時間派發器
    -- 綁定觸摸事件到層當中
    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)

    return layer
end

--------------------------------
-- Click And Move Test
--------------------------------
function ClickAndMoveTest()
    cclog("ClickAndMoveTest")
    local scene = cc.Scene:create()
    layer = cc.Layer:create()

    initWithLayer()
    scene:addChild(layer)
    scene:addChild(CreateBackMenuItem())
    

    return scene
end


Cocos2d-x有兩種觸摸事件,一種是單點觸摸,一種是多點觸摸,本篇博客例子使用的單點觸摸事件。EventListenerTouchOneByOne類
-- 單點觸摸的監聽器
    local listener = cc.EventListenerTouchOneByOne:create()
    -- 注冊兩個回調監聽方法
    listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
    listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
    local eventDispatcher = layer:getEventDispatcher()-- 時間派發器
    -- 綁定觸摸事件到層當中
    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)

最後的一個方法綁定節點到監聽器中去,觸摸優先級越低的越先被觸摸。相同優先級的,後添加的先被觸。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved