axmol/samples/Lua/TestLua/Resources/luaScript/ParallaxTest/ParallaxTest.lua

171 lines
5.2 KiB
Lua

local kTagNode = 0
local kTagGrossini = 1
local function createParallaxLayer(title, subtitle)
local layer = CCLayer:create()
Helper.initWithLayer(layer)
local titleStr = title == nil and "No title" or title
local subTitleStr = subtitle == nil and "" or subtitle
Helper.titleLabel:setString(titleStr)
Helper.subtitleLabel:setString(subTitleStr)
return layer
end
--------------------------------------------------------------------
--
-- Parallax1
--
--------------------------------------------------------------------
local function Parallax1()
local ret = createParallaxLayer("Parallax: parent and 3 children")
-- Top Layer, a simple image
local cocosImage = CCSprite:create(s_Power)
-- scale the image (optional)
cocosImage:setScale( 2.5 )
-- change the transform anchor point to 0,0 (optional)
cocosImage:setAnchorPoint( CCPoint(0,0) )
-- Middle layer: a Tile map atlas
local tilemap = CCTileMapAtlas:create(s_TilesPng, s_LevelMapTga, 16, 16)
tilemap:releaseMap()
-- change the transform anchor to 0,0 (optional)
tilemap:setAnchorPoint( CCPoint(0, 0) )
-- Anti Aliased images
tilemap:getTexture():setAntiAliasTexParameters()
-- background layer: another image
local background = CCSprite:create(s_back)
-- scale the image (optional)
background:setScale( 1.5 )
-- change the transform anchor point (optional)
background:setAnchorPoint( CCPoint(0,0) )
-- create a void node, a parent node
local voidNode = CCParallaxNode:create()
-- NOW add the 3 layers to the 'void' node
-- background image is moved at a ratio of 0.4x, 0.5y
voidNode:addChild(background, -1, CCPoint(0.4,0.5), CCPoint(0,0))
-- tiles are moved at a ratio of 2.2x, 1.0y
voidNode:addChild(tilemap, 1, CCPoint(2.2,1.0), CCPoint(0,-200) )
-- top image is moved at a ratio of 3.0x, 2.5y
voidNode:addChild(cocosImage, 2, CCPoint(3.0,2.5), CCPoint(200,800) )
-- now create some actions that will move the 'void' node
-- and the children of the 'void' node will move at different
-- speed, thus, simulation the 3D environment
local goUp = CCMoveBy:create(4, CCPoint(0,-500) )
local goDown = goUp:reverse()
local go = CCMoveBy:create(8, CCPoint(-1000,0) )
local goBack = go:reverse()
local arr = CCArray:create()
arr:addObject(goUp)
arr:addObject(go)
arr:addObject(goDown)
arr:addObject(goBack)
local seq = CCSequence:create(arr)
voidNode:runAction( (CCRepeatForever:create(seq) ))
ret:addChild( voidNode )
return ret
end
--------------------------------------------------------------------
--
-- Parallax2
--
--------------------------------------------------------------------
local function Parallax2()
local ret = createParallaxLayer("Parallax: drag screen")
ret:setTouchEnabled( true )
-- Top Layer, a simple image
local cocosImage = CCSprite:create(s_Power)
-- scale the image (optional)
cocosImage:setScale( 2.5 )
-- change the transform anchor point to 0,0 (optional)
cocosImage:setAnchorPoint( CCPoint(0,0) )
-- Middle layer: a Tile map atlas
local tilemap = CCTileMapAtlas:create(s_TilesPng, s_LevelMapTga, 16, 16)
tilemap:releaseMap()
-- change the transform anchor to 0,0 (optional)
tilemap:setAnchorPoint( CCPoint(0, 0) )
-- Anti Aliased images
tilemap:getTexture():setAntiAliasTexParameters()
-- background layer: another image
local background = CCSprite:create(s_back)
-- scale the image (optional)
background:setScale( 1.5 )
-- change the transform anchor point (optional)
background:setAnchorPoint( CCPoint(0,0) )
-- create a void node, a parent node
local voidNode = CCParallaxNode:create()
-- NOW add the 3 layers to the 'void' node
-- background image is moved at a ratio of 0.4x, 0.5y
voidNode:addChild(background, -1, CCPoint(0.4,0.5), CCPoint(0, 0))
-- tiles are moved at a ratio of 1.0, 1.0y
voidNode:addChild(tilemap, 1, CCPoint(1.0,1.0), CCPoint(0,-200) )
-- top image is moved at a ratio of 3.0x, 2.5y
voidNode:addChild( cocosImage, 2, CCPoint(3.0,2.5), CCPoint(200,1000) )
ret:addChild(voidNode, 0, kTagNode)
local prev = {x = 0, y = 0}
local function onTouchEvent(eventType, x, y)
if eventType == "began" then
prev.x = x
prev.y = y
return true
elseif eventType == "moved" then
local node = ret:getChildByTag(kTagNode)
local newX = node:getPositionX()
local newY = node:getPositionY()
local diffX = x - prev.x
local diffY = y - prev.y
node:setPosition( CCPoint.__add(CCPoint(newX, newY), CCPoint(diffX, diffY)) )
prev.x = x
prev.y = y
end
end
ret:registerScriptTouchHandler(onTouchEvent)
return ret
end
function ParallaxTestMain()
cclog("ParallaxMain")
Helper.index = 1
CCDirector:getInstance():setDepthTest(true)
local scene = CCScene:create()
Helper.createFunctionTable = {
Parallax1,
Parallax2
}
scene:addChild(Parallax1())
scene:addChild(CreateBackMenuItem())
return scene
end