Cocos2d-x Lua

Cocos2dx-js VS Cocos2dx-lua

从效率上编译成字节码的Lua效率肯定比JS高,从坑方面来说,目前Lua几乎没有太大的坑,JS除非团队有牛人。从已经上线成功的产品来说,大多采用Cocos2dx-lua。JS目前没有比较成功的产品。从入门方面,Lua更为合适。对于小团队而言,目前Lua比JS更加合适。

Cocos2d-x官方主推JS的解决方案,因为JS可以跨越移动设备、桌面的限制,实现一套程序跑任意平台。不过对于HTML5的发展与强调体验的游戏来说,也许H5还需一段时间。

从市场来说,Lua明显是更为理性的选择,因为它更加成熟、安全且大作采用。

开发环境搭建

  • quick-3.3
  • SublimeText
  • QuickXDev

俄罗斯方块

1.场景

4933701-37b8a7d42969cbea.png
场景

准备资源文件

4933701-b969b14b80380726.png
32x32 brick.png

创建公共函数

$ vim app/Common.lua
-- 每个方块占32个像素
gridSize = 32
-- 场景宽度:10个方块共320px
sceneWidth = 8+2
-- 场景高度:18个方块
sceneHeight = 18

-- 方块坐标转换为屏幕坐标
function grid2pos(x, y)
    local director = cc.Director:getInstance()
    -- 获取可视区域宽高
    local size = director:getVisibleSize()
    -- 获取原点
    local origin = director:getVisibleOrigin()

    local posX = origin.x + size.width/2 + gridSize*x - sceneWidth/2*gridSize 
    local posY = origin.y + size.height/2 + gridSize*y - sceneHeight/2*gridSize 

    return posX, posY
end

创建场景

$ vim app/Scene.lua
require "app.Common"

function makeKey(x, y)
    return x*1000 + y
end

-- 8*18
local Scene = class("Scene")

function Scene:ctor(node)
    self.map = {}
    for x=0, sceneWidth-1 do
        for y=0, sceneHeight-1 do
            local posX,posY = grid2pos(x,y)
            local sprite = cc.Sprite:create("brick.png")
            sprite:setPosition(posX, posY)
            node:addChild(sprite)

            local visible = (x==0 or x==sceneWidth-1) or y==0
            sprite:setVisible(visible)

            self.map[makeKey(x,y)] = sprite
        end
    end
end

function Scene:clear()
    for y=1,sceneHeight-1 do
        self:clearLine(y)
    end
end

function Scene:clearLine(y)
    for x=1,sceneWidth-2 do
        self.set(x,y,false)
    end
end

function Scene:set(x,y,value)
    local sprite = self.map[makeKey(x,y)]
    if sprite==nil then
        return
    end
    sprite:setVisible(value)
end

function Scene:get(x, y)
    local sprite = self.map[makeKey(x,y)]
    if sprite==nil then
        return
    end
    return sprite:isVisible()
end

return Scene

主场景中添加

$ vim app/scenes/MainScene.lua
local Scene = require "app.Scene"

local MainScene = class("MainScene", function()
    return display.newScene("MainScene")
end)

function MainScene:ctor()
end

function MainScene:onEnter()
    self.scene = Scene.new(self)
end

function MainScene:onExit()
end

return MainScene
  1. 方块
4933701-9035b2fd5837149a.png
方块类型
$ vim app/Brick.lua
--[[
1. 方块的基本类型
2. 方块数据化
]]--

local brickArray= {
    {
        {
            {1,1,1,0},
            {0,1,0,0},
            {0,0,0,0},
            {0,0,0,0},
        },
        {
            {0,1,0,0},
            {1,1,1,0},
            {0,0,0,0},
            {0,0,0,0},
        },
        {
            {0,1,0,0},
            {1,1,0,0},
            {0,1,0,0},
            {0,0,0,0},
        },
        {
            {0,1,0,0},
            {0,1,1,0},
            {0,1,0,0},
            {0,0,0,0},
        }
    },
    {
        {
            {0,1,1,0},
            {0,1,1,0},
            {0,0,0,0},
            {0,0,0,0},
        }
    },
    {
        {
            {0,1,1,0},
            {1,1,0,0},
            {0,0,0,0},
            {0,0,0,0},
        },
        {
            {0,1,0,0},
            {0,1,0,0},
            {0,0,1,0},
            {0,0,1,0},
        }
    },
    {
        {
            {1,1,0,0},
            {0,1,1,0},
            {0,0,0,0},
            {0,0,0,0},
        },
        {
            {0,0,1,0},
            {0,1,1,0},
            {0,1,0,0},
            {0,0,0,0},
        }
    },
    {
        initOffset = 1,
        {
            {0,0,0,0},
            {1,1,1,1},
            {0,0,0,0},
            {0,0,0,0},
        },
        {
            {0,1,0,0},
            {0,1,0,0},
            {0,1,0,0},
            {0,1,0,0},
        }
    },
    {
        initOffset = 1,
        {
            {0,0,0,0},
            {1,1,1,0},
            {1,0,0,0},
            {0,0,0,0},
        },
        {
            {1,1,0,0},
            {0,1,0,0},
            {0,1,0,0},
            {0,0,0,0},
        },
        {
            {0,0,1,0},
            {1,1,1,0},
            {0,0,0,0},
            {0,0,0,0},
        },
        {
            {0,1,0,0},
            {0,1,0,0},
            {0,1,1,0},
            {0,0,0,0},
        }
    },
    {
        initOffset = 1,
        {
            {0,0,0,0},
            {1,1,1,0},
            {0,0,1,0},
            {0,0,0,0},
        },
        {
            {0,1,0,0},
            {0,1,0,0},
            {1,1,0,0},
            {0,0,0,0},
        },
        {
            {1,0,0,0},
            {1,1,1,0},
            {0,0,0,0},
            {0,0,0,0},
        },
        {
            {0,1,1,0},
            {0,1,0,0},
            {0,1,0,0},
            {0,0,0,0},
        }
    },
}

方块处理类

local Brick = class("Brick")

local initXoffset = sceneWidth/2 - 3

local function iterateBrick(index, trans, callback)
    local transArray = brickArray[index]
    local eachBrick = transArray[trans]

    for y=1,#eachBrick do
        local xData = eachBrick[y]
        for x=1,#xData do
            local data = xData[x]
            if not callback(x, y, data~=0) then
                return false
            end
        end
    end

    return true
end

function rawPlace(index, trans, scene, newX, newY)
    local result = {}

    local callback = function(x, y, b)
        if b then
            local finalX = newX + x
            local finalY = newY - y
            if scene:get(finalX, finalY) then
                return false
            end
            table.insert(result, {x=finalX, y=finalY})
        end
        return true
    end

    if iterateBrick(index, trans, callback) then
        for k,v in ipairs(result) do
            scene:set(v.x, v.y, true)
        end
        return true
    end
end

function Brick:ctor(scene, index)
    self.x = initXoffset
    self.y = sceneHeight

    local offset = brickArray[index].initOffset
    if offset then
        self.y = self.y + offset
    end

    self.scene = scene
    self.index = index
    self.trans = 1
end

function Brick:move(deltaX, deltaY)
    self:clear()

    local x = self.x + deltaX
    local y = self.y + deltaY

    if rawPlace(self.index, self.trans, self.scene, x, y) then
        self.x = x
        self.y = y
        return true
    else
        self.place()
        return false
    end
end

function Brick:rotate()
    local offset = brickArray[self.index].initOffset
    if offset and self.y==0 then
        return
    end

    self:clear()

    local transArray = brickArray[self.index]
    local trans = self.trans + 1
    if trans>#transArray then
        trans = 1
    end

    if rawPlace(self.index, trans, self.scene, self.x, self.y) then
        self.trans = trans
    else
        self:place()
    end
end

function Brick:place()
    return rawPlace(self.index, self.trans, self.scene, self.x, self.y)
end

function Brick:clear()
    iterateBrick(self.index, self.trans, function(x,y,b)
        local finalX = self.x + x
        local finalY = self.y + y
        if b then
            self.scene:set(finalX, finalY, false)
        end
        return false
    end)
end

return Brick

坦克大战

使用Texture对帧动画打包

4933701-c2e125f4e0db85b1.png
tex.png

动画帧数据文件 tex.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>frames</key>
        <dict>
            <key>brick0.png</key>
            <dict>
                <key>frame</key>
                <string>{{182,2},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>brick1.png</key>
            <dict>
                <key>frame</key>
                <string>{{148,2},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>brick2.png</key>
            <dict>
                <key>frame</key>
                <string>{{114,2},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>brick3.png</key>
            <dict>
                <key>frame</key>
                <string>{{80,2},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>bullet0.png</key>
            <dict>
                <key>frame</key>
                <string>{{36,2},{6,6}}</string>
                <key>offset</key>
                <string>{1,-1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{14,14},{6,6}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>bullet1.png</key>
            <dict>
                <key>frame</key>
                <string>{{36,86},{10,10}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{11,11},{10,10}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>explode0.png</key>
            <dict>
                <key>frame</key>
                <string>{{2,240},{16,14}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{8,8},{16,14}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>explode1.png</key>
            <dict>
                <key>frame</key>
                <string>{{36,64},{22,20}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,5},{22,20}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>explode2.png</key>
            <dict>
                <key>frame</key>
                <string>{{90,98},{26,24}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <true/>
                <key>sourceColorRect</key>
                <string>{{2,3},{26,24}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>grass.png</key>
            <dict>
                <key>frame</key>
                <string>{{46,2},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>home.png</key>
            <dict>
                <key>frame</key>
                <string>{{216,2},{30,26}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{1,3},{30,26}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>mud.png</key>
            <dict>
                <key>frame</key>
                <string>{{2,206},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>road.png</key>
            <dict>
                <key>frame</key>
                <string>{{2,172},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>sign_bullet.png</key>
            <dict>
                <key>frame</key>
                <string>{{20,240},{10,24}}</string>
                <key>offset</key>
                <string>{0,-1}</string>
                <key>rotated</key>
                <true/>
                <key>sourceColorRect</key>
                <string>{{11,5},{10,24}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>sign_tank_blue.png</key>
            <dict>
                <key>frame</key>
                <string>{{238,78},{16,18}}</string>
                <key>offset</key>
                <string>{0,-1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{8,8},{16,18}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>sign_tank_green.png</key>
            <dict>
                <key>frame</key>
                <string>{{238,58},{16,18}}</string>
                <key>offset</key>
                <string>{0,-1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{8,8},{16,18}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>steel0.png</key>
            <dict>
                <key>frame</key>
                <string>{{2,138},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>steel1.png</key>
            <dict>
                <key>frame</key>
                <string>{{2,104},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>steel2.png</key>
            <dict>
                <key>frame</key>
                <string>{{2,70},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>steel3.png</key>
            <dict>
                <key>frame</key>
                <string>{{2,36},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_fire0.png</key>
            <dict>
                <key>frame</key>
                <string>{{62,194},{26,28}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{2,1},{26,28}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_fire1.png</key>
            <dict>
                <key>frame</key>
                <string>{{46,226},{26,28}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{2,1},{26,28}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_run0.png</key>
            <dict>
                <key>frame</key>
                <string>{{36,98},{26,30}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{2,0},{26,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_run1.png</key>
            <dict>
                <key>frame</key>
                <string>{{206,58},{26,30}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <true/>
                <key>sourceColorRect</key>
                <string>{{2,0},{26,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_run2.png</key>
            <dict>
                <key>frame</key>
                <string>{{174,36},{26,30}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <true/>
                <key>sourceColorRect</key>
                <string>{{2,0},{26,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_run3.png</key>
            <dict>
                <key>frame</key>
                <string>{{142,36},{26,30}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <true/>
                <key>sourceColorRect</key>
                <string>{{2,0},{26,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_run4.png</key>
            <dict>
                <key>frame</key>
                <string>{{110,36},{26,30}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <true/>
                <key>sourceColorRect</key>
                <string>{{2,0},{26,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_run5.png</key>
            <dict>
                <key>frame</key>
                <string>{{78,36},{26,30}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <true/>
                <key>sourceColorRect</key>
                <string>{{2,0},{26,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_run6.png</key>
            <dict>
                <key>frame</key>
                <string>{{46,36},{26,30}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <true/>
                <key>sourceColorRect</key>
                <string>{{2,0},{26,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_blue_run7.png</key>
            <dict>
                <key>frame</key>
                <string>{{216,30},{26,30}}</string>
                <key>offset</key>
                <string>{-1,1}</string>
                <key>rotated</key>
                <true/>
                <key>sourceColorRect</key>
                <string>{{2,0},{26,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_fire0.png</key>
            <dict>
                <key>frame</key>
                <string>{{88,130},{24,28}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,1},{24,28}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_fire1.png</key>
            <dict>
                <key>frame</key>
                <string>{{74,224},{24,28}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,1},{24,28}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_run0.png</key>
            <dict>
                <key>frame</key>
                <string>{{62,162},{24,30}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,0},{24,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_run1.png</key>
            <dict>
                <key>frame</key>
                <string>{{86,64},{24,30}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,0},{24,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_run2.png</key>
            <dict>
                <key>frame</key>
                <string>{{64,98},{24,30}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,0},{24,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_run3.png</key>
            <dict>
                <key>frame</key>
                <string>{{62,130},{24,30}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,0},{24,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_run4.png</key>
            <dict>
                <key>frame</key>
                <string>{{36,194},{24,30}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,0},{24,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_run5.png</key>
            <dict>
                <key>frame</key>
                <string>{{36,162},{24,30}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,0},{24,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_run6.png</key>
            <dict>
                <key>frame</key>
                <string>{{36,130},{24,30}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,0},{24,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>tank_green_run7.png</key>
            <dict>
                <key>frame</key>
                <string>{{60,64},{24,30}}</string>
                <key>offset</key>
                <string>{0,1}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{4,0},{24,30}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
            <key>water.png</key>
            <dict>
                <key>frame</key>
                <string>{{2,2},{32,32}}</string>
                <key>offset</key>
                <string>{0,0}</string>
                <key>rotated</key>
                <false/>
                <key>sourceColorRect</key>
                <string>{{0,0},{32,32}}</string>
                <key>sourceSize</key>
                <string>{32,32}</string>
            </dict>
        </dict>
        <key>metadata</key>
        <dict>
            <key>format</key>
            <integer>2</integer>
            <key>realTextureFileName</key>
            <string>tex.png</string>
            <key>size</key>
            <string>{256,256}</string>
            <key>smartupdate</key>
            <string>$TexturePacker:SmartUpdate:de153ba6091aa039f5da088c67aa2563$</string>
            <key>textureFileName</key>
            <string>tex.png</string>
        </dict>
    </dict>
</plist>

调整屏幕为横屏

$ app/config.lua
CONFIG_SCREEN_WIDTH  = 960
CONFIG_SCREEN_HEIGHT = 640

显示坦克

4933701-11eaa394eebf0b12.png
显示坦克

创建对象类 app/Object.lua

- 对象类
local Object = class("Object")

-- 构造对象
function Object:ctor(node)
    -- 创建精灵并添加到节点内
    self.sprite = cc.Sprite:create()
    self.node = node
    self.node:addChild(self.sprite)
end

-- 判断对象是否有效
function Object:alive()
    return self.sprite ~= nil
end

-- 销毁对象
function Object:destroy()
    self.node:removeChild(self.sprite)
    self.sprite = nil
end

return Object

创建坦克类 app/tank.lua

-- 加载对象
local Object = require "app.Object"

-- 坦克类派生自对象
local Tank = class("Tank", Object)

-- 构造函数
function Tank:ctor(node)
    -- 父类初始化
    Tank.super.ctor(self, node)
    self.node = node
    -- 临时代码
    local director = cc.Director:getInstance()
    -- 获取窗口大小
    local size = director:getWinSize()
    -- 设置精灵居中
    self.sprite:setPosition(size.width/2, size.height/2)
    -- 获取精灵甄
    local spriteFrameCache = cc.SpriteFrameCache:getInstance()
    local frame = spriteFrameCache:getSpriteFrame("tank_green_run0.png")
    -- 设置精灵帧
    self.sprite:setSpriteFrame(frame)
end
-- 析构函数
function Tank:destroy()
    Tank.super.destroy(self)
end

return Tank

主场景加载并精灵帧并显示坦克app/scenes/MainScene.lua

local Tank = require "app.Tank"

local MainScene = class("MainScene", function()
    return display.newScene("MainScene")
end)

function MainScene:ctor()
end

function MainScene:onEnter()
    -- 加载游戏资源
    local spriteFrameCache = cc.SpriteFrameCache:getInstance()
    -- 加载精灵帧动画
    spriteFrameCache:addSpriteFrames("res/tank/tex.plist")
    -- 创建坦克
    self.tank = Tank.new(self)

end

function MainScene:onExit()
end

return MainScene
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cocos2d-x是一款流行的开源游戏引擎,它可以用作开发本地移动游戏和桌面游戏。利用cocos2d-x游戏源码,开发人员可以快速构建流畅、高效、具有吸引力的游戏。该引擎使用C ++语言和脚本语言Lua来实现游戏开发,用户可以根据自己的需要进行选择。 cocos2d-x游戏源码包含许多强大的功能和工具,例如精灵、动画、场景管理、碰撞检测和音频控制等。通过这些功能,开发人员可以方便地创建各种类型的游戏,例如动作游戏、射击游戏、冒险游戏和益智游戏等。 此外,cocos2d-x游戏源码还具有高度定制化的特性,允许开发人员根据他们的需求自定义游戏元素。这种定制化可以通过改进游戏画面,添加新的模式和关卡,甚至整个新的游戏玩法来完成。 总之,cocos2d-x游戏源码是一款功能强大、易于使用和高度定制的游戏引擎,它可以帮助开发人员快速开发各种类型的游戏。无论你是专业开发人员还是无经验的游戏制作者,cocos2d-x都是一个极好的选择。 ### 回答2: Cocos2d-x游戏源码是使用Cocos2d-x引擎进行开发的游戏程序代码。Cocos2d-x引擎是一个开源的跨平台游戏引擎,可以支持iOS、Android、Windows Phone、Windows、MacOS和Linux等多个平台,并且提供了丰富的游戏开发API和工具集。Cocos2d-x游戏源码包含了游戏的核心逻辑、UI设计、动画效果、音频效果等各方面的代码,可以作为开发者学习和借鉴的重要资料。 由于Cocos2d-x引擎支持多种编程语言(如C++、Lua等),因此Cocos2d-x游戏源码也会有对应的编程语言版本。开发者可以通过阅读Cocos2d-x游戏源码,了解游戏开发过程中的技术细节,学习如何使用Cocos2d-x引擎进行游戏开发。同时,开发者也可以通过对Cocos2d-x游戏源码进行修改和优化,来满足游戏的特定需求,提升游戏的性能和用户体验。 总之,Cocos2d-x游戏源码是游戏开发者必备的重要资源,可以帮助开发者更好地了解游戏开发技术,提升游戏开发水平。 ### 回答3: cocos2d-x是一款优秀的游戏开发引擎,其源码包含了许多功能强大的游戏开发工具和API。使用cocos2d-x可以帮助开发者更快速更高效地开发出优秀的游戏作品。 cocos2d-x的游戏源码非常丰富,其包含了许多不同类型的游戏示例和模板,如平面射击、塔防、解谜等,这些示例可以帮助开发者更好地了解cocos2d-x的使用方法和原理。 cocos2d-x的源码还包含了许多强大的API和工具,例如场景管理、动画控制、音频引擎等,这些工具和API能够帮助开发者更好地完成游戏的开发和调试。 此外,cocos2d-x的源码还提供了完整的游戏开发框架,包括资源管理、内存管理、事件机制等,这些框架可以帮助开发者更好地组织代码和提高代码的可维护性。 总的来说,cocos2d-x游戏源码提供了丰富的工具和API,可以帮助开发者更高效地进行游戏开发,大大降低了开发难度和成本,是一款非常适合游戏开发者使用的引擎。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值