关于游戏的资源,玩法,逻辑在这份教程里面写的很清楚:http://www.tairan.com/archives/5839
在这里我贴出自己转成lua写法后的代码:
SushiSprite类:
require "Cocos2d"
require "Cocos2dConstants"
local SushiSprite = class("SushiSprite", function(...)
local str = select(1,...)
return cc.Sprite:createWithSpriteFrameName(str)
end)
sushiNormal = {
"sushi_1n.png",
"sushi_2n.png",
"sushi_3n.png",
"sushi_4n.png",
"sushi_5n.png",
"sushi_6n.png"
}
sushiVertical = {
"sushi_1v.png",
"sushi_2v.png",
"sushi_3v.png",
"sushi_4v.png",
"sushi_5v.png",
"sushi_6v.png"
}
sushiHorizontal = {
"sushi_1h.png",
"sushi_2h.png",
"sushi_3h.png",
"sushi_4h.png",
"sushi_5h.png",
"sushi_6h.png"
}
DISPLAY_MODE_NORMAL = 0
DISPLAY_MODE_HORIZONTAL = 1
DISPLAY_MODE_VERTICAL = 2
function SushiSprite.create(row, col)
local index = math.random(1,6)
local sprite = SushiSprite.new(sushiNormal[index], row, col, index);
return sprite
end
function SushiSprite:ctor(str, row, col, index)
self.m_row = row
self.m_col = col
self.m_imgIndex = index
self.m_isNeedRemove = false
self.m_ignoreCheck = false
self.m_displayMode = DISPLAY_MODE_NORMAL
end
function SushiSprite.getContentWidth()
local itemWidth = 0;
if 0 == itemWidth then
local sprite = cc.Sprite:createWithSpriteFrameName(sushiNormal[1])
itemWidth = sprite:getContentSize().width
end
return itemWidth;
end
function SushiSprite:getCol()
return self.m_col
end
function SushiSprite:setCol(value)
self.m_col = value
end
function SushiSprite:getRow()
return self.m_row
end
function SushiSprite:setRow(value)
self.m_row = value
end
function SushiSprite:getImgIndex()
return self.m_imgIndex
end
function SushiSprite:getIgnoreCheck()
return self.m_ignoreCheck
end
function SushiSprite:setIgnoreCheck(value)
self.m_ignoreCheck = value
end
function SushiSprite:getIsNeedRemove()
return self.m_isNeedRemove
end
function SushiSprite:setIsNeedRemove(value)
self.m_isNeedRemove = value
end
function SushiSprite:setDisplayMode(value)
self.m_displayMode = value
local frame
if value == DISPLAY_MODE_VERTICAL then
frame = cc.SpriteFrameCache:getInstance():getSpriteFrame(sushiVertical[self.m_imgIndex])
elseif value == DISPLAY_MODE_HORIZONTAL then
frame = cc.SpriteFrameCache:getInstance():getSpriteFrame(sushiHorizontal[self.m_imgIndex])
else
return
end
self:setSpriteFrame(frame)
end
function SushiSprite:getDisplayMode()
return self.m_displayMode
end
return SushiSprite
PlayerLayer类:
require "Cocos2d"
require "Cocos2dConstants"
require "src.SushiSprite"
Sushi = require("SushiSprite")
local PlayerLayer = class("PlayerLayer", function()
return cc.Layer:create()
end)
function PlayerLayer:createScene()
local scene = cc.Scene:create();
local layer = PlayerLayer:create();
scene:addChild(layer);
return scene
end
function PlayerLayer.create()
local layer = PlayerLayer.new();
layer:init();
return layer;
end
function PlayerLayer:ctor()
self.spriteSheet = nil
self.m_isNeedFillVacancies = false
self.m_isAnimationing = true
self.m_isTouchEnable = true
self.m_srcSushi = nil
self.m_destSushi = nil
self.m_movingVertical = true
self.m_hasCanSushi = true
end
function PlayerLayer:init()
math.randomseed(os.time())
--创建游戏背景
local winSize = cc.Director:getInstance():getWinSize()
local background = cc.Sprite:create("background.png")
background:setAnchorPoint(0,1)
background:setPosition(0,winSize.height)
self:addChild(background)
--初始化寿司精灵表单
cc.SpriteFrameCache:getInstance():addSpriteFrames("sushi.plist","sushi.pvr.ccz")
--初始化矩阵的宽和高
self.m_width = 5
self.m_height = 7
--初始化寿司矩阵左下角的点
self.m_matrixLeftBottomX = (background:getContentSize().width - Sushi.getContentWidth() * self.m_width - (self.m_width - 1) * 6) / 2
self.m_matrixLeftBottomY = 0
--初始化数组
self.m_matrix = {}
--初始化寿司矩阵
self:initMatrix();
--每帧刷新
local function update(delta)
self:update(delta)
end
self:scheduleUpdateWithPriorityLu