Lua中调用 cocos2d-x 的滑动条/滚动条 ScrollView



ScrollView

我想玩儿过手机的朋友对滑动条都不陌生吧,(旁边: 这不是废话么???? )

  那好吧,废话不多说直接开始ScrollView吧

local m_BaseNode  -- 主场景

local CreateScroll    -- 房间分级滑动视图

local CreateStageNode   -- 创建节点

local m_ScrollView              -- 滑动层变量

local m_Inner     -- 内容器

local addScrollHBtnNode   -- 添加滑动节点

local addScrollHTouchEventListener -- 滑动节点监听

local m_DataInfo = {                -- 数据表

{png = "doudizhu", fun = function () OnDouDiZhu() end},

{png = "yixiazai", fun = function () OnZhaJinHua() end},

{png = "yixiazainiuniu", fun = function () OnNiuNiu() end}

}

CreateScroll
= function ( )

print(
"创建滑动视图" )

local stageStartX
=  150         --开始位置

local stageOffX
= 300          
-- 偏移

local stageX
= stageStartX      -- 当前stage位置

-- 创建内容器

m_Inner = cc.NodeRGBA:create()

-- 创建全部 stage

for i=1,#m_DataInfo
do

local stageNode
= CreateStageNode(i, cc.size(width, height) )

-- 函数在下面这里是滑动条中单个选项图片的宽和高

local btn = addScrollHBtnNode(m_Inner,stageNode,

m_DataInfo[i].fun,

stageX, 250

)      -- 函数再下面,将 stageNode 添加到内容器中

stageX = stageX + stageOffX

end

-- 创建ScrollView

m_ScrollView = cc.ScrollView:create(cc.size(900, 430), m_Inner)

-- 设置内容器的大小

m_ScrollView:setContentSize(cc.size(stageX - stageStartX, 380))

-- 设置滑动的方向   0 是水平方向     1是垂直方向    2 是水平垂直都可以

m_ScrollView:setDirection(0)

m_ScrollView:setPosition(cc.p(65, 210))

--将m_ScrollView添加到m_BaseNode中

m_BaseNode:addChild(m_ScrollView)

collectgarbage( "setpause", 100)

collectgarbage( "setstepmul", 5000)

end

-- 创建节点函数

CreateStageNode = function (stageID, size)

-- 创建节点

local stageNode = CCLayer:create()

stageNode:setContentSize(size.width, size.height)

stageNode:setTag(stageID)

addSprite(stageNode, m_DataInfo[stageID].png, 0, 0)

-- 设置显示的字

-- 在这里可以向每个节点中添加相应的信息

-- 返回节点

return stageNode

end

-- p : 层    name : 图片名字(plist文件中)  x y : 坐标

function
addSprite( p, name, x, y, a, z ,scale)

local sf = CCSpriteFrameCache:getInstance():getSpriteFrame( name )

local s  = CCSprite:createWithSpriteFrame( sf )

if not s then s = CCSprite:createWithSpriteFrameName( "wrong" ) end

if z then p:addChild( s, z ) else p:addChild( s ) end

if x and y then s:setPosition(x, y) end

if a then s:setAnchorPoint( a ) end

s:setScale(scale or 1.0)

return s

end

-- 添加滑动节点

-- p : 层   btnNode : 节点   cb : 点击后的回调函数

addScrollHBtnNode = function ( p, btnNode, cb, x, y, z, a, scale )

local layer = CCLayer:create()

layer:addChild(btnNode)

btnNode:setAnchorPoint(sys.ap.topCenter)

btnNode:setPosition({0,0})

p:addChild(layer)

layer:setContentSize({width=btnNode:getContentSize().width,height=btnNode:getContentSize().height})

if a then

layer:setAnchorPoint(a)

else

layer:setAnchorPoint(sys.ap.leftTop)

end

if x and y then layer:setPosition(x,y) end

if cb then addScrollHTouchEventListener(layer,cb) end

return layer

end

-- 滑动节点监听函数

addScrollHTouchEventListener = function ( btn, cb )

-- handing touch events

local touchBeginPoint = nil

local touchMovePoint = nil

local isMove = false

local moveDis = 5

local function onTouchBegan(touch, event)

isMove = false

local location = touch:getLocation()

touchBeginPoint = {x = location.x, y = location.y}

local s         = btn:getContentSize()

local rect      = { x=-s.width/2, y=-s.height/2, width=s.width, height=s.height }

local touchP    = btn:convertToNodeSpace( touchBeginPoint )

if Point_In_Rect(rect, touchP) then

btn:setScale(1.1)

end

return true

end

local function onTouchMove(touch, event)

local location = touch:getLocation()

touchMovePoint = {x = location.x, y = location.y}

if math.abs(touchBeginPoint.x - touchMovePoint.x) > moveDis then

isMove = true

btn:setScale(1.0)

end

end

local function onTouchEnd(touch, event)

local location = touch:getLocation()

touchBeginPoint = {x = location.x, y = location.y}

local s         = btn:getContentSize()

local rect      = { x=-s.width/2, y=-s.height/2, width=s.width, height=s.height }

local touchP    = btn:convertToNodeSpace( touchBeginPoint )

if Point_In_Rect(rect, touchP) and not isMove then

if cb then

cb()

end

end

btn:setScale(1.0)

end

local listener = cc.EventListenerTouchOneByOne:create()

listener:setSwallowTouches(false)  --允许消息向下流转

listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )

listener:registerScriptHandler(onTouchMove,cc.Handler.EVENT_TOUCH_MOVED )

listener:registerScriptHandler(onTouchEnd,cc.Handler.EVENT_TOUCH_ENDED )

local eventDispatcher = btn:getEventDispatcher()

eventDispatcher:addEventListenerWithSceneGraphPriority(listener, btn)

end

-- 斗地主回调函数

OnDouDiZhu = function ()

print("斗地主..........")

end

-- 扎金花回调函数

OnZhaJinHua = function ()

print("炸金花..........")

end

-- 牛牛回调函数

OnNiuNiu = function ()

print("牛牛............")

end

旁白呢?????

旁白:( 找我干嘛???给我讲完啦??啊啊啊啊啊啊,这么点东西你要写这么多啊)

呵呵。。。。。。。。。。

说实话,开始这点东西我找了很久都没有找到,最后终于搞懂了,所以写出来给大家分享

Lua中调用 cocos2d-x 的滑动条/滚动条 ScrollView,布布扣,bubuko.com

时间: 2024-10-12 13:04:32

Lua中调用 cocos2d-x 的滑动条/滚动条 ScrollView的相关文章

Lua中“.”调用方法与“:”调用方法的区别

Lua中"."调用方法与":"调用方法的区别:                                                                                                                         一.概述 学lua的时候有一个迷惑点,就是搞不清楚'.'与':'调用方法的区别,今天很早就起来看了看一个大牛的视频讲解,才顿悟了:'.'调用和':'实际是传递参数的个数不同而已,':

Lua中调用C函数

Lua利用一个虚拟的堆栈来给C传递值或从C获取值.每当Lua调用C函数,都会获得一个新的堆栈,该堆栈初始包含所有的调用C函数所需要的参数值(Lua传给C函数的调用实参),并且C函数执行完毕后,会把返回值压入这个栈(Lua从中拿到C函数调用结果). 于此相关的C API有几个比较重要的定义如下: (1)typedef struct lua_State lua_State; lua虚拟机(或叫解释器),可以理解为一个thread,和一个完整的Lua虚拟环境的执行状态. (2)typedef int

Lua中调用C函数(lua-5.2.3)

Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性. 对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们完全可以通过C函数来实现,之后再通过Lua调用指定的C函数. 对于那些可被Lua调用的C函数而言,其接口必须遵循Lua要求的形式,即typedef int (*lua_CFunction)(lua_State* L). 简单说明一下,该函数类型仅仅包含一个表示Lua环境的指针作为其唯一的参数,实现者可以通过该指针进一步获取Lua代码中实际传入的参数.返回值是整型,表示该

cocos2d-x 3.0 在lua中调用自定义类

环境 windows8, cocos2d-x 3.0, 现在开始安装需要的一些其它包 1. 按README.mdown文档上面要求的, 下载在windows下要安装的东东, 主要就是python2.7.3, PyYAML-3.10.win32-py2.7, pyCheetah 这些东东在README.mdown上面都给好了连接, 直接下载就行了, 安装好python后, 在系统环境变量的PATH中设置python所在的目录2. 安装android-ndk-r9b, 下载地址:http://dl.

Lua中调用函数使用点号和冒号的区别

最简单的类 TSprite = { x = 0, y = 0, } function TSprite.setPosition(x, y) TSprite.x = x; TSprite.y = y; end TSprite.setPosition(1, 2); print("TSprite坐标(" .. TSprite.x .. "," .. TSprite.y .. ")"); mSprite.setPosition TSprite = { x

cocos2d-x 3.0 在C++中调用lua函数

代码用的是<cocos2d-x 3.0 在lua中调用自定义类>中的代码. 在上篇的基础上进行扩充. 写lua函数 local function process_packet(user_data) if user_data then user_data = tolua.cast(user_data, "user_data"); print (user_data:uid()); print (user_data:uname()); end end local ghall =

c/c++中调用lua第一个例子

首先下载lua源码包,然后分别是make,make linux,make install 注意如果没有make install,那么在#include<lua.h>时,会报找不到lua.h文件的错误. 网上找到一段源码: func.lua --变量定义width=1 ;height=2 ;--lua函数定义,实现加法function sum(a,b)    return a+b ;end--lua函数定义,实现字符串相加function mystrcat(a,b)    return a..b

Unity3D热更新之LuaFramework篇[05]--Lua脚本调用c#以及如何在Lua中使用Dotween

在上一篇文章 Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法 中,我对LuaBehaviour脚本进行了扩展,添加了两个新的UI监听方法,也提到最好能单写一个脚本处理此事.本篇文章就来继续这个工作. 从Lua中调用C#代码 1.创建UI监听脚本 打开之前的工程,在Assets/LuaFrameworks/Scripts/Common下,创建一个UIEventEx.cs脚本,将LuaBehaviour.cs中的AddButtonClick以及AddInputFiel

[译] Lua中的闭包

原文:(PDF) Lua中的闭包 摘要 第一类(first-class)函数是一种非常强大的语言结构,并且是函数式语言的基础特性.少数过程式语言由于其基于栈的实现,也支持第一类函数.本文讨论了Lua 5.x用于实现第一类函数的新算法.与之前所使用的技术不同,该算法不需要对源代码做静态分析(一种会极大降低Lua代码生成器即时性的技术)并且可支持使用顺序栈存储常规局部变量. 1 介绍 第一类函数是函数式语言的标志性特征,在过程式语言中也是很实用的概念.很多过程式函数如果以高阶函数的形式编写则会增加可