IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Cocos2d-x 3,kotlinui组件 -> 正文阅读

[游戏开发]Cocos2d-x 3,kotlinui组件

– 运行动作序列

grossini:runAction( cc.Sequence:create(cc.MoveBy:create(1, cc.p(150,0)) ,cc.CallFunc:create(bugMe)))

return ret

end


– PauseTest

– 暂停测试


local function PauseTest()

local ret = createTestLayer(“Pause Test”)

local schedulerEntry = nil

local function unpause(dt)

scheduler:unscheduleScriptEntry(schedulerEntry)

schedulerEntry = nil

local node = ret:getChildByTag( kTagGrossini )

local pDirector = cc.Director:getInstance()

pDirector:getActionManager():resumeTarget(node)

end

local function onNodeEvent(event)

– 进入时

if event == “enter” then

local s = cc.Director:getInstance():getWinSize()

local l = cc.Label:createWithTTF(“After 3 seconds grossini should move”, “fonts/Thonburi.ttf”, 16)

ret:addChild(l)

l:setAnchorPoint(cc.p(0.5, 0.5))

l:setPosition( cc.p(s.width / 2, 245) )

local grossini = cc.Sprite:create(s_pPathGrossini)

ret:addChild(grossini, 0, kTagGrossini)

grossini:setPosition(cc.p(200,200))

– 创建移动动作,持续时间1秒,移动到(150,0)的位置

local action = cc.MoveBy:create(1, cc.p(150,0))

local pDirector = cc.Director:getInstance()

– 通过获取director关联的ActionManager并为目标添加动作

– 为一个目标添加动作。 如果目标已经存在,动作将被加在已经存在的目标上。

– 如果目标不存在,将会创建这个目标的新对象,这个动作将被添加在这个新创建出来的对象上 当目标动作被暂停,动作队列的顺序也不会乱。

pDirector:getActionManager():addAction(action, grossini, true)

schedulerEntry = scheduler:scheduleScriptFunc(unpause, 3.0, false)

– 退出

elseif event == “exit” then

if schedulerEntry ~= nil then

scheduler:unscheduleScriptEntry(schedulerEntry)

end

end

end

– 注册响应事件

ret:registerScriptHandler(onNodeEvent)

return ret

end


– RemoveTest


local function RemoveTest()

local ret = createTestLayer(“Remove Test”)

local l = cc.Label:createWithTTF(“Should not crash”, “fonts/Thonburi.ttf”, 16)

– 获得屏幕大小

local s = cc.Director:getInstance():getWinSize()

ret:addChild(l)

l:setAnchorPoint(cc.p(0.5, 0.5))

l:setPosition( cc.p(s.width / 2, 245))

– 创建移动动作,持续2秒,到(200,0)的位置

local pMove = cc.MoveBy:create(2, cc.p(200, 0))

– 停止动作

local function stopAction()

– 根据Tag来获取子节点

local pSprite = ret:getChildByTag(kTagGrossini)

pSprite:stopActionByTag(kTagSequence)

end

– 创建一个回调函数

local callfunc = cc.CallFunc:create(stopAction)

local pSequence = cc.Sequence:create(pMove,callfunc)

pSequence:setTag(kTagSequence)

local pChild = cc.Sprite:create(s_pPathGrossini)

pChild:setPosition( 200, 200 )

ret:addChild(pChild, 1, kTagGrossini)

pChild:runAction(pSequence)

return ret

end


– ResumeTest

– 恢复测试


local function ResumeTest()

local ret = createTestLayer(“Resume Test”)

local schedulerEntry = nil

local function resumeGrossini(time)

scheduler:unscheduleScriptEntry(schedulerEntry)

schedulerEntry = nil

local pGrossini = ret:getChildByTag(kTagGrossini)

local pDirector = cc.Director:getInstance()

pDirector:getActionManager():resumeTarget(pGrossini)

end

local function onNodeEvent(event)

if event == “enter” then

local l = cc.Label:createWithTTF(“Grossini only rotate/scale in 3 seconds”, “fonts/Thonburi.ttf”, 16)

ret:addChild(l)

local s = cc.Director:getInstance():getWinSize()

l:setAnchorPoint(cc.p(0.5, 0.5))

l:setPosition( s.width / 2, 245)

local pGrossini = cc.Sprite:create(s_pPathGrossini)

ret:addChild(pGrossini, 0, kTagGrossini)

pGrossini:setPosition(200,200)

– 运行缩放的动作

pGrossini:runAction(cc.ScaleBy:create(2, 2))

local pDirector = cc.Director:getInstance()

– 暂停目标

pDirector:getActionManager():pauseTarget(pGrossini)

– 运行旋转动作,旋转360度,持续2秒

pGrossini:runAction(cc.RotateBy:create(2, 360))

schedulerEntry = scheduler:scheduleScriptFunc(resumeGrossini, 3.0, false)

elseif event == “exit” then

if schedulerEntry ~= nil then

scheduler:unscheduleScriptEntry(schedulerEntry)

end

end

end

ret:registerScriptHandler(onNodeEvent)

return ret

end

function ActionManagerTestMain()

cclog(“ActionManagerTestMain”)

Helper.index = 1 – 初始索引为1

– 设置深度测试

cc.Director:getInstance():setDepthTest(true)

– 创建场景

local scene = cc.Scene:create()

– 初始化方法表

Helper.createFunctionTable = {

CrashTest,

LogicTest,

PauseTest,

RemoveTest,

ResumeTest

}

– 添加层

scene:addChild(CrashTest())

scene:addChild(CreateBackMenuItem())

ret

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

urn scene

end

在例子中用到一些定义好的资源路径,还有相关帮助类,童鞋们可以到可以到相应目录下进行查找:

help.lua(帮助类,封装定义了相关方法,创建测试层、切换场景等)

require “Cocos2d”

CC_CONTENT_SCALE_FACTOR = function()

– 获取surface的大小,单位为像素

return cc.Director:getInstance():getContentScaleFactor()

end

–把以像素为单位的矩形转换为以点为单位的矩形

CC_POINT_PIXELS_TO_POINTS = function(pixels)

return cc.p(pixels.x/CC_CONTENT_SCALE_FACTOR(), pixels.y/CC_CONTENT_SCALE_FACTOR())

end

– 把以点为单位的矩形转换为以像素为单位的矩形

CC_POINT_POINTS_TO_PIXELS = function(points)

return cc.p(points.xCC_CONTENT_SCALE_FACTOR(), points.yCC_CONTENT_SCALE_FACTOR())

end

– cclog 打印日志

cclog = function(…)

print(string.format(…))

end

– change table to enum type 把表转换为枚举类型

function CreateEnumTable(tbl, index)

local enumTable = {}

local enumIndex = index or -1

for i, v in ipairs(tbl) do

enumTable[v] = enumIndex + i

end

return enumTable

end

– back menu callback 返回菜单回调

local function MainMenuCallback()

local scene = cc.Scene:create()

scene:addChild(CreateTestMenu())

– 切换场景

cc.Director:getInstance():replaceScene(scene)

end

– add the menu item for back to main menu

– 为返回主菜单添加菜单项

function CreateBackMenuItem()

– 创建一个标签

local label = cc.Label:createWithTTF(“MainMenu”, s_arialPath, 20)

– 设置器锚点

label:setAnchorPoint(cc.p(0.5, 0.5))

– 设置菜单项标签

local MenuItem = cc.MenuItemLabel:create(label)

MenuItem:registerScriptTapHandler(MainMenuCallback)

– 获得屏幕大小

local s = cc.Director:getInstance():getWinSize()

– 创建菜单

local Menu = cc.Menu:create()

– 添加菜单项

Menu:addChild(MenuItem)

– 设置菜单位置

Menu:setPosition(0, 0)

– 设置菜单项位置,大致在右下角的位置

MenuItem:setPosition(s.width - 50, 25)

return Menu

end

– 帮助类

Helper = {

index = 1, – 索引

createFunctioinTable = nil, – 存储方法的表

currentLayer = nil, – 当前层

titleLabel = nil, – 标题

subtitleLabel = nil – 子标题

}

– 下个动作

function Helper.nextAction()

Helper.index = Helper.index + 1 – 索引加1

if Helper.index > table.getn(Helper.createFunctionTable) then

Helper.index = 1

end

return Helper.newScene()

end

– 回退动作

function Helper.backAction()

Helper.index = Helper.index - 1

if Helper.index == 0 then

Helper.index = table.getn(Helper.createFunctionTable)

end

return Helper.newScene()

end

– 重新开始动作

function Helper.restartAction()

return Helper.newScene()

end

– 切换新的场景

function Helper.newScene()

local scene

– 如果使用物理效果

if Helper.usePhysics then

– 创建一个带物理效果的场景

scene = cc.Scene:createWithPhysics()

else

scene = cc.Scene:create()

end

Helper.currentLayer = Helper.createFunctionTableHelper.index

– 添加当前层

scene:addChild(Helper.currentLayer)

– 添加返回菜单

scene:addChild(CreateBackMenuItem())

– 切换场景

cc.Director:getInstance():replaceScene(scene)

end

– 初始化层

function Helper.initWithLayer(layer)

Helper.currentLayer = layer

– 获取屏幕大小

local size = cc.Director:getInstance():getWinSize()

Helper.titleLabel = cc.Label:createWithTTF("", s_arialPath, 28)

Helper.titleLabel:setAnchorPoint(cc.p(0.5, 0.5))

layer:addChild(Helper.titleLabel, 1)

Helper.titleLabel:setPosition(size.width / 2, size.height - 50)

Helper.subtitleLabel = cc.Label:createWithTTF("", s_thonburiPath, 16)

Helper.subtitleLabel:setAnchorPoint(cc.p(0.5, 0.5))

layer:addChild(Helper.subtitleLabel, 1)

Helper.subtitleLabel:setPosition(size.width / 2, size.height - 80)

– menu菜单

local item1 = cc.MenuItemImage:create(s_pPathB1, s_pPathB2)

local item2 = cc.MenuItemImage:create(s_pPathR1, s_pPathR2)

local item3 = cc.MenuItemImage:create(s_pPathF1, s_pPathF2)

item1:registerScriptTapHandler(Helper.backAction)

item2:registerScriptTapHandler(Helper.restartAction)

item3:registerScriptTapHandler(Helper.nextAction)

local menu = cc.Menu:create()

menu:addChild(item1)

menu:addChild(item2)

menu:addChild(item3)

menu:setPosition(cc.p(0, 0))

– 摆放三个菜单项的位置

item1:setPosition(cc.p(size.width / 2 - item2:getContentSize().width * 2, item2:getContentSize().height / 2))

item2:setPosition(cc.p(size.width / 2, item2:getContentSize().height / 2))

item3:setPosition(cc.p(size.width / 2 + item2:getContentSize().width * 2, item2:getContentSize().height / 2))

layer:addChild(menu, 1)

local background = cc.Layer:create()

layer:addChild(background, -10)

end

– 创建测试层

function createTestLayer(title, subtitle)

– 创建一个层

local layer = cc.Layer: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

testResource.lua

定义了所有的资源路径,方便管理和获取

s_pPathGrossini = “Images/grossini.png”

s_pPathSister1 = “Images/grossinis_sister1.png”

s_pPathSister2 = “Images/grossinis_sister2.png”

s_pPathB1 = “Images/b1.png”

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:33:05  更:2021-12-26 22:34:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:23:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码