require(“experimentalUIConstants”)
require(“cocos2d.Cocos2d”)
require(“cocos2d.Cocos2dConstants”)
– 获取目标平台
local targetPlatform = cc.Application:getInstance():getTargetPlatform()
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) then
local videoPlayer = nil
end
–声明VideoPlayerScene类
local VideoPlayerScene = class(“VideoPlayerScene”,function()
return cc.Scene:create()
end)
–静态创建函数
function VideoPlayerScene.create()
local scene = VideoPlayerScene.new()
scene:addChild(scene:createLayerMenu())
return scene
end
–构造函数
function VideoPlayerScene:ctor()
self.visibleSize = cc.Director:getInstance():getVisibleSize()
self.origin = cc.Director:getInstance():getVisibleOrigin()
self.winSize = cc.Director:getInstance():getWinSize()
self.visibleRect = cc.Director:getInstance():getOpenGLView():getVisibleRect()
self.centerPos = cc.p(self.visibleRect.x + self.visibleRect.width / 2,self.visibleRect.y + self.visibleRect.height /2)
self.schedulerID = nil
local function onNodeEvent(event)
if event == "enter" then
self:onEnter()
end
end
self:registerScriptHandler(onNodeEvent)
end
function VideoPlayerScene:onEnter()
cclog(“onEnter”)
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) then
local videoFullPath = cc.FileUtils:getInstance():fullPathForFilename(“oceans.mp4”)
videoPlayer:setFileName(videoFullPath)
videoPlayer:play()
end
end
–播放背景音乐
function VideoPlayerScene:playBgMusic()
AudioEngine.playMusic(“bg.mp3”,true)
end
– create menu 创建菜单层
function VideoPlayerScene:createLayerMenu()
local layerMenu = cc.Layer:create()
local titleLabel = cc.Label:createWithTTF("MyVideoPlayer", "fonts/Marker Felt.ttf", 28)
titleLabel:setAnchorPoint(cc.p(0.5, 0.5))
titleLabel:setPosition(3 * self.winSize.width /4 , self.winSize.height - 50)
layerMenu:addChild(titleLabel, 1)
cc.MenuItemFont:setFontSize(18)
local videoStateLabel = cc.Label:createWithSystemFont("IDLE","Arial",16)
videoStateLabel:setAnchorPoint(cc.p(1, 0.5))
videoStateLabel:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 10,self.visibleRect.y + 200))
layerMenu:addChild(videoStateLabel)
--创建视频播放器
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) then
local function onVideoEventCallback(sener, eventType)
if eventType == ccexp.VideoPlayerEvent.PLAYING then
videoStateLabel:setString("PLAYING")
elseif eventType == ccexp.VideoPlayerEvent.PAUSED then
videoStateLabel:setString("PAUSED")
elseif eventType == ccexp.VideoPlayerEvent.STOPPED then
videoStateLabel:setString("STOPPED")
elseif eventType == ccexp.VideoPlayerEvent.COMPLETED then
videoStateLabel:setString("COMPLETED")
end
end
videoPlayer = ccexp.VideoPlayer:create()
videoPlayer:setPosition(centerPos)
videoPlayer:setAnchorPoint(cc.p(0.5, 0.5))
videoPlayer:setContentSize(cc.size(self.winSize.width /2,self.winSize.height /2))
videoPlayer:addEventListener(onVideoEventCallback)
videoPlayer:setPosition(cc.p(0,self.winSize.height /2))
layerMenu:addChild(videoPlayer)
--全屏回调
local function menuFullScreenCallback(tag, sender)
if nil ~= videoPlayer then
videoPlayer:setFullScreenEnabled(not videoPlayer:isFullScreenEnabled())
end
end
--暂停回调
local function menuPauseCallback(tag, sender)
if nil ~= videoPlayer then
videoPlayer:pause()
end
end
--返回回调
local function menuResumeCallback(tag, sender)
if nil ~= videoPlayer then
videoPlayer:resume()
end
end
--停止回调
local function menuStopCallback(tag, sender)
if nil ~= videoPlayer then
videoPlayer:stop()
end
end
--隐藏回调
local function menuHintCallback(tag, sender)
if nil ~= videoPlayer then
videoPlayer:setVisible(not videoPlayer:isVisible())
end
end
--播放本地资源回调
local function menuResourceVideoCallback(tag, sender)
if nil ~= videoPlayer then
local videoFullPath = cc.FileUtils:getInstance():fullPathForFilename("oceans.mp4")
videoPlayer:setFileName(videoFullPath)
videoPlayer:play()
end
end
--播放网络资源回调
local function menuonlinevideocallback(tag, sender)
if nil ~= videoplayer then
videoplayer:seturl("http://101.200.53.213/res/video/oceans.mp4")
videoplayer:play()
end
end
--伸缩比例回调
local function menuRatioCallback(tag, sender)
if nil ~= videoPlayer then
videoPlayer:setKeepAspectRatioEnabled(not videoPlayer:isKeepAspectRatioEnabled())
end
end
end
local fullSwitch = cc.MenuItemFont:create("FullScreenSwitch")
fullSwitch:setAnchorPoint(cc.p(0.0, 0.0))
fullSwitch:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 50))
local pauseItem = cc.MenuItemFont:create("Pause")
pauseItem:setAnchorPoint(cc.p(0.0, 0.0))
pauseItem:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 100))
local resumeItem = cc.MenuItemFont:create("Resume")
resumeItem:setAnchorPoint(cc.p(0.0, 0.0))
resumeItem:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 150))
local stopItem = cc.MenuItemFont:create("Stop")
stopItem:setAnchorPoint(cc.p(0.0, 0.0))
stopItem:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 200))
local hintItem = cc.MenuItemFont:create("Hint")
hintItem:setAnchorPoint(cc.p(0.0, 0.0))
hintItem:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 250))
local resourceVideo = cc.MenuItemFont:create("Play resource video")
resourceVideo:setAnchorPoint(cc.p(0, 0))
resourceVideo:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 300))
local onlineVideo = cc.MenuItemFont:create("Play online video")
onlineVideo:setAnchorPoint(cc.p(0, 0))
onlineVideo:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 350))
local ratioSwitch = cc.MenuItemFont:create("KeepRatioSwitch")
ratioSwitch:setAnchorPoint(cc.p(0, 0))
ratioSwitch:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 400))
local menu = cc.Menu:create(fullSwitch, pauseItem, resumeItem, stopItem, hintItem, resourceVideo, onlineVideo, ratioSwitch)
menu:setPosition(cc.p(0,0))
layerMenu:addChild(menu)
--注册回调事件
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) then
fullSwitch:registerScriptTapHandler(menuFullScreenCallback)
pauseItem:registerScriptTapHandler(menuPauseCallback)
resumeItem:registerScriptTapHandler(menuResumeCallback)
stopItem:registerScriptTapHandler(menuStopCallback)
hintItem:registerScriptTapHandler(menuHintCallback)
resourceVideo:registerScriptTapHandler(menuResourceVideoCallback)
onlineVideo:registerScriptTapHandler(menuOnlineVideoCallback)
ratioSwitch:registerScriptTapHandler(menuRatioCallback)
end
--self:playBgMusic()
return layerMenu
end
return VideoPlayerScene