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 self end local 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()) end end local 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之前需要进行一下判断
原文链接:https://www.f2er.com/cocos2dx/343729.html