cocos2dx 3.4 lua学习一个简单的小例子

cocos2dx 3.4 lua学习一个简单的小例子,第1张

概述1.环境 cocos2d 3.4 编译器 cocoside<p><a target=_blank href="http://cn.cocos2d-x.org/tutorial/show?id=1069">http://cn.cocos2d-x.org/tutorial/show?id=1069</a></p><p>跟着这篇文章进行学习 不过有几个地方会不同</p><p> </p><p>具体看代码<
1.环境 cocos2d 3.4 编译器 cocosIDe<p><a target=_blank href="http://cn.cocos2d-x.org/tutorial/show?ID=1069">http://cn.cocos2d-x.org/tutorial/show?ID=1069</a></p><p>跟着这篇文章进行学习 不过有几个地方会不同</p><p></p><p>具体看代码</p>
main.lua
 
cc.fileUtils:getInstance():setPopupNotify(false)cc.fileUtils:getInstance():addSearchPath("src/")cc.fileUtils:getInstance():addSearchPath("res/")require "config"require "cocos.init"require "app/models/card.lua"local function openScene()    -- 创建一个场景    local self = cc.Scene:create()    -- 声明一个层    local layer    local allPoints -- 存储所有点    local allCards = {} -- 存储所有卡片    local currentNum -- 当前数字    -- 生成可用点    local function genPoints()        allPoints = {}        -- 6行*10列        for i = 0,9 do            for j = 0,5 do                -- 插入点到allPoints数组当中                table.insert( allPoints,1,cc.p( i * 80,j * 80 ) )            end        end    end    -- 添加卡片    local function addCards()        -- 设置随机种子        math.randomseed( os.time() )        local c  -- 卡片        local randNum -- 随机数        local p -- 所在点        -- 添加5张卡片        for var = 1,5 do            --cc.exports.card = "card"            c = card( var ) -- 生成一张卡片            layer:addChild( c ) -- 添加到层当中            -- 根据数组最大值生成随机数            randNum = math.random( table.maxn(allPoints)  )            p = table.remove( allPoints,randNum )            c:setposition( p )            c:setAnchorPoint(  cc.p( 0,0 ) )            print("p.x:"..p.x..",p.y:"..p.y);            -- 插入到卡片数组            table.insert( allCards,c )        end    end    -- 开始游戏    local function startGame()        -- 初始值为1        currentNum = 1        -- 先生成可用点        genPoints()        -- 然后添加卡片        addCards()    end    -- 显示所有卡片背景    local function showAllCardsBg()        for key,var in pairs(allCards) do            var:showBg()        end    end    -- 触摸事件,第一个参数为事件类型,第二个参数为x坐标,第二个为y坐标    local function ontouch( type,x,y )        -- 根据x,y生成一个点        local p = cc.p(x,y)        for key,var in pairs(allCards) do            print(var:getposition())            -- 判断是否是点击范围            local pX,pY = var:getposition()            if (p.x < (pX + 80)) and (p.y < (pY + 80) and (p.x > pX) and (p.y > pY)) then                --if var:getBoundingBox():containsPoint(p) then                if currentNum == var.num then                    -- 如果是点击的数字,则移除卡片                    table.remove(allCards,key)                    layer:removeChild(var,true)                    -- 点击了1之后,其他数字翻过背景                    if currentNum == 1 then                        showAllCardsBg()                    end                    -- 当所有卡片都被顺序点击了,提示成功                    if table.maxn( allCards ) <= 0 then                        print( "Success" )                    end                    -- 每次增加1                    currentNum = currentNum + 1                end            end        end    end    -- 初始化方法    local function init()        -- 创建一个层        layer = cc.Layer:create()        -- 将层添加到场景        self:addChild( layer )        -- 设置可点击        layer:settouchEnabled( true )        -- 注册监听事件        layer:registerScripttouchHandler( ontouch )        -- 开始游戏        startGame()        -- self:addChild(layer)        --    --测试代码        --    local s = cc.Sprite:create("res/mn.jpg")        --    s:setposition(cc.p(0,0))        --    s:setAnchorPoint( cc.p( 0,0 ) )        --    layer:addChild(s)        --        --    layer:settouchEnabled(true)        --    layer:registerScripttouchHandler( function (type,y)        --        --        if s:getBoundingBox():containsPoint(cc.p(x,y)) then        --          print("mn clicked")        --        end        --        print(type)        --        return true        --    end )        --        --    self:addChild(layer)    end    init()    return selfendlocal function main()       -- 获得导演类实例    local dir = cc.Director:getInstance()    -- 设置不显示帧    dir:setdisplayStats(false)    -- 运行场景    if cc.Director:getInstance():getRunningScene() then        cc.Director:getInstance():replaceScene(openScene())    else        cc.Director:getInstance():runWithScene(openScene())    endendlocal status,msg = xpcall(main,__G__TRACKBACK__)if not status then    print(msg)end

card.lua

local function card(num)
local self = cc.Sprite:create();
local bg
local txt
local function init()
self.num = num
self:setContentSize(cc.size(80,80))
self:setAnchorPoint(cc.p(0,0))
-- ÉèÖÃÏÔʾÊý×ÖµÄÎı¾
txt = cc.Label:create()
txt:setString(num)
txt:setSystemFontSize(50)
txt:setSystemFontname("CourIEr")
txt:setposition(cc.p(self:getContentSize().wIDth/2,self:getContentSize().height/2))

self:addChild(txt)
--添加背景
bg = cc.Sprite:create()
bg:setTextureRect(cc.rect(0,80,80))
bg:setcolor(cc.c3b(255,255,255))
bg:setposition(cc.p(0,0))
bg:setAnchorPoint(cc.p(0,0))
self:addChild(bg)

--显示文本
self:showTxt()
end

self.showTxt = function ( )
txt:setVisible(true)
bg:setVisible(false)
end

self.showBg = function ( )
txt:setVisible(false)
txt:setVisible(true)
end
init()
return self
end
cc.exports.card = card

主要是两点不同 一个 是card的使用 需要在card中将方法变为local 最后导出使用 否则会报错

另一个是runWithScene之前需要进行一下判断

总结

以上是内存溢出为你收集整理的cocos2dx 3.4 lua学习一个简单的小例子全部内容,希望文章能够帮你解决cocos2dx 3.4 lua学习一个简单的小例子所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1052108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存