效果:
左边为一个listView,可以显示各个游戏角色,当点击任意一个角色时,右边会将此角色进行放大显示,并播放动画
代码:
local listViewScene = class("listViewScene",function()
return display.newScene("listViewScene")
end)
function listViewScene:ctor()
display.addSpriteFrames("frame.plist","frame.pvr.ccz")
display.addSpriteFrames("stage.plist","stage.pvr.ccz")
display.newSprite("BG.jpg")
:pos(display.cx,display.cy)
:addTo(self)
self.lv = cc.ui.UIListView.new({
viewRect = cc.rect(50, 100, 150, 500),
bgColor = cc.c4b(200, 200, 200, 120),
direction = cc.ui.UIScrollView.DIRECTION_VERTICAL,
})
:onTouch(function(event)
self:touchListener(event)
end)
:addTo(self)
for i = 1,7 do
--[[local item = self.lv:newItem() --列表角色静态显示
local content = display.newSprite("#"..i..' (1).png')
item:addContent(content)
item:setItemSize(150, 150)
self.lv:addItem(item)]]--
local item = self.lv:newItem()
local content = display.newSprite()
self:addAnimation() --列表角色动态显示
content:playAnimationForever(display.getAnimationCache("frame-" .. i))
item:addContent(content)
item:setItemSize(150, 150)
self.lv:addItem(item)
end
self.lv:reload() --刷新list,让其显示
self:setFrame(1) --设置右边默认放大的角色为列表第一个角色
self:stage()
end
--设置监听获取点击时的位置并切换右边放大角色
function listViewScene:touchListener(event)
local PosIndex
if "clicked" == event.name then
if self.frame ~= nil then
self:removeChild(self.frame)
end
PosIndex = event.itemPos
self:setFrame(PosIndex)
end
end
--设置右边放大角色的位置及动画播放
function listViewScene:setFrame(PosIndex)
self.frame = display.newSprite()
self.frame:setPosition(400,350)
self:addChild(self.frame)
self:addAnimation()
self.frame:playAnimationForever(display.getAnimationCache("frame-" .. PosIndex))
self.frame:setScale(1.5)
end
function listViewScene:stage()
self.stage = display.newSprite()
self.stage:setPosition(400,180)
self:addChild(self.stage)
local frames = display.newFrames("stage" .. " (%d).png", 1, 7)
local animation = display.newAnimation(frames, 0.3)
self.stage:playAnimationForever(animation, 0.2)
self.stage:setScale(0.7)
end
--把列表里各个精灵的动画进行缓存,方便后面取用
function listViewScene:addAnimation()
local animationNames = {1, 2, 3, 4, 5, 6, 7}
local animationFrameNum = {6, 6, 6, 6, 6, 6, 4}
for i = 1, #animationNames do
local frames = display.newFrames(i .. " (%d).png", 1, animationFrameNum[i])
local animation = display.newAnimation(frames, 0.3)
animation:setRestoreOriginalFrame(true)
display.setAnimationCache("frame-" .. animationNames[i], animation)
end
end
return listViewScene