【quick-cocos2d-lua】 显示各角色动画的列表,点击角色并放大显示

效果:

左边为一个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

猜你喜欢

转载自blog.csdn.net/Super_Cola/article/details/82345008