axmol/README.mdown

4.6 KiB

cocos2d-x multiplatform

cocos2d-x is a multi-platform 2D game engine in C++, based on cocos2d-iphone and licensed under MIT. Now this engine has been ported to WOPhone, iOS 4.1, Android 2.1 and higher, WindowsXP & Windows7.

Multi Platform

  • cocos2d-iphone-cpp: tested on iPhone 3.2, 4.1 & 4.2 SDK
  • cocos2d-android-ndk: based on ndk-r4(crystax.net version) & ndk-r5, tested on Android 2.1, 2.2, 2.3 emulator, HTC G2, G3, G6, G7 device
  • cocos2d-wophone: well tested on WOPhone of ChinaUnicom, both emulator & device.
  • cocos2d-win32: well tested on WindowsXP & Windows7. It depends on PowerVR OpenGL ES 1.1 libraries for win32 system

Document

Contact us

Lua Support FIX Readme

  • CCScheduler support local function
  • Support autorelease C++ object
  • When C++ object deleted, set Lua object userdata to nil
  • Add CCNode:setPosition(x, y), CCNode::getPosition(), huge performance boost
  • Remove needless class and functions from tolua++ .pkg files, improved performance
  • CCMenuItem support script function
  • CCScene script callback
  • CCLayer touch & multi-touches events handler

How to use:

-- use CCSchedule::scheduleScriptFunc()

local scheduler = CCScheduler:sharedScheduler()

local handle    -- save script callback handle

local frameCount = 0
local function onEnterFrame(dt)
    print("onEnterFrame:", frameCount, dt)
    frameCount = frameCount + 1
    if frameCount >= 60 then
        -- remove script callback
        scheduler:unscheduleScriptFunc(handle)
    end
end

handle = scheduler:scheduleScriptFunc(onEnterFrame, 1.0 / 60, false)

-- use CCMenuItem:registerScriptHandler()

local function onMenuItemTap(menuItemTag)
    print(menuItemTag) -- output "1"
end

local menuItem = CCMenuItemImage:itemFromNormalImage("button.png", "button.png")
menuItem:registerScriptHandler(onMenuItemTap)

local menu = CCMenu:node()
menu:addChild(menuItem)
menuItem:setTag(1) -- menuItemTag

scene:addChild(menu)

-- use CCScene script callback

local function newScene()
    local scene = CCScene:node()

    local function sceneEventHandler(isOnEnter)
        if isOnEnter then
            if scene.onEnter then scene:onEnter() end
        else
            if scene.onExit then scene:onExit() end
            scene:unregisterScriptEventsHandler()
        end
    end

    scene:registerScriptEventsHandler(sceneEventHandler)
    return scene
end

local myScene = newScene("MyScene")
function myScene:onEnter()
    print("MyScene:onEnter()")
end

function myScene:onExit()
    print("MyScene:onExit()")
end

CCDirector:sharedDirector():runWithScene(myScene)

-- use CCLayer touch event handler

local layer = CCLayer:node()
local function onTouch(event, x, y)
    -- event: CCTOUCHBEGAN, CCTOUCHMOVED, CCTOUCHENDED, CCTOUCHCANCELLED
    print(event, x, y)
    if event == CCTOUCHBEGAN then return true end
end

layer:registerScriptTouchHandler(onTouch, false)

-- use CCLayer multi-touches event handler

local layer = CCLayer:node()
local function onTouches(event, points)
    -- event: CCTOUCHBEGAN, CCTOUCHMOVED, CCTOUCHENDED, CCTOUCHCANCELLED
    print(event)

    for i = 1, #points, 2 do
        print(string.format("x: 0.2f, y: 0.2f", points[i], points[i + 1]))
    end
end

layer:registerScriptTouchHandler(onTouches, true)

TODO:

  • When C++ object deleted, remove Lua object userdata