cocos2d scrollview上面添加按钮

cocos2d scrollview上面添加按钮,第1张

且看 CCMenu 的touchbegan函数岁大:

bool CCMenu::ccTouchBegan(CCTouch* touch, CCEvent* event)

{

CC_UNUSED_PARAM(event)

if (m_eState != kCCMenuStateWaiting || ! m_bVisible || !m_bEnabled)

{

return false

}

for (CCNode *c = this->m_pParentc != NULLc = c->getParent())

{

if (c->isVisible() == false)

{

return false

}

}

m_pSelectedItem = this->itemForTouch(touch)

if (m_pSelectedItem)

{

m_eState = kCCMenuStateTrackingTouch

m_pSelectedItem->selected()

return true

}

return false

}

touchbegan时响应点击事件的一部分乎蚂竖因素在于那个for循环,只有当前menu的所有父节物旁点可见时,才能继续响应点击事件。

除此之外,当该menu可见时,那么该menu就会遍历左右的children,且看

CCMenuItem* CCMenu::itemForTouch(CCTouch *touch)

{

CCPoint touchLocation = touch->getLocation()

if (m_pChildren &&m_pChildren->count() >0)

{

CCObject* pObject = NULL

CCARRAY_FOREACH(m_pChildren, pObject)

{

CCMenuItem* pChild = dynamic_cast<CCMenuItem*>(pObject)

if (pChild &&pChild->isVisible() &&pChild->isEnabled())

{

CCPoint local = pChild->convertToNodeSpace(touchLocation)

CCRect r = pChild->rect()

r.origin = CCPointZero

if (r.containsPoint(local))

{

return pChild

}

}

}

}

return NULL

}

当且仅当 if (pChild &&pChild->isVisible() &&pChild->isEnabled()) Child存在 可见 使能 时就会响应对应的点击时间。

于是,又根据cocos2d touch事件的分发规则,先响应优先级高的layer,然后menu就先响应点击了。

首先我简单介绍一下组件压缩包的组成

Cocos2dx

实现Cocos2d-x中跨平枝尺台分享功能,需拷贝到您项目的Classes文件夹中

Platforms

原生的Android和iOS社会化组件SDK,需要您将库和资源拷贝到对应平台的项目中

doc

组件的集成文档;

Umeng_Cocos2dx_Demo_V1.0

Android部分的demo文件,可以安装在手机上看一下简单的分享效果和样式

Cocos2d-x虽然是一个跨平台的引擎,但是对于Android和IOS平台来说,具体的集成方式还是有一定的区别,这里分别介绍Android和IOS平台集成中不同的地方,然后再集中介绍跨平弯渗台通用的部分。

Android平台集成步骤

步骤一:

下载Cocos2d-x组件(下载地址) 并且将jar包添加到build path 路径下,将res资源文件夹加入到你工程对应资源文件下。将Platforms/Android/controller目录下的com文件夹拷贝到您的Cocos2d-x项目Android平台的src目录下,并且在jni/Android.mk中的LOCAL_SRC_FILES下添加如下配置 (注意格式,否则会编译出错) :

../../Classes/Cocos2dx/Android/CCUMSocialController.cpp \

../../Classes/Cocos2dx/ShareButton/UMShareButton.cpp \

../../Classes/Cocos2dx/Common/CCUMSocialSDK.cpp

步骤二:

在Cocos2dxActivity子类的onCreate方法下添加如下代码,用来完成初始化步骤

// this为Cocos2dxActivity类型, 参数2为描述符,可随意修改.

CCUMSocialController.initSocialSDK(this, "com.umeng.social.share")

步骤三:

在代码中覆写Cocos2dxActivity子类的onActivityResult方法,用来实现回调方法。在onActivityResult添加如下代码 :

// 授权回埋搭脊调

CCUMSocialController.onActivityResult(requestCode, resultCode, data)

super.onActivityResult(requestCode, resultCode, data)

iOS平台集成步骤:

步骤一:

解压SDK压缩包,将Platforms/iOS文件夹和Cocos2dx文件夹拖入工程目录,并删除Cocos2dx/Android文件夹,添加后应该是这个效果:

步骤二:

添加系统需要的framework

Security.framework //用于系统加密处理

libiconv.dylib //QQ互联的库文件

SystemConfiguration.framework//QQ互联需要的framework

CoreGraphics.framework //QQ互联需要的framework

Social.framework //分享组件需要的framework,如果不使用twitter则不需要

libsqlite3.dylib //QQ互联需要的framework

libstdc++.dylib //C++的库文件

CoreTelephony.framework //QQ互联需要的framework

libz.dylib //QQ互联需要的framework

Accounts.framework //系统需要的framework,如果不使用twitter则不需要

步骤三:

实现系统的回调方法,在Xcode工程中的ios文件夹下的AppController.mm文件中加入下面的代码:

#import "UMSocial.h"

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

return [UMSocialSnsService handleOpenURL:url]

}

完成了上述准备工作之后,就可以开始正式的分享步骤了,友盟提供了多种分享样式,有精力的开发者可以使用底层接口,可以完全自由定制分享界面和样式,不过相信大部分开发者们使用第三方插件的初衷都是为了节省精力,所以这里就只介绍使用默认分享界面的方法,有更多需求的开发者们可以自己探索自定义界面接口部分。

步骤一:加入系统需要的头文件

// 授权回调

#include "Cocos2dx/Common/CCUMSocialSDK.h"

#include "Cocos2dx/ShareButton/UMShareButton.h"

// 使用友盟命令空间

USING_NS_UM_SOCIAL

// ...... 代码省略

// HelloWorld为cocos2d::CCLayer的子类

bool HelloWorld::init()

{

//////////////////////////////

// 1. super init first

if ( !CCLayer::init() )

{

return false

}

}

步骤二:分享按钮的创建

// 创建分享按钮, 参数1为按钮正常情况下的图片, 参数2为按钮选中时的图片,参数3为友盟appkey, 参数4为分享回调

UMShareButton *shareButton = UMShareButton::create("shareNormal.png","shareSelected.png", "你的友盟appkey", share_selector(shareCallback))

步骤三:设置分享平台及内容

// 显示在友盟分享面板上的平台

vector

* platforms = new vector

()

platforms->push_back(SINA)

platforms->push_back(RENREN)

platforms->push_back(DOUBAN)

platforms->push_back(QZONE)

platforms->push_back(QQ)

// 设置友盟分享面板上显示的平台

shareButton->setPlatforms(platforms)

// 设置文本分享内容

shareButton->setShareContent("umeng social Cocos2d-x sdk.")

// 设置要分享的图片, 图片支持本地图片和url图片, 但是url图片必须以http://或者https://开头

shareButton->setShareImage("/sdcard/header.jpeg")

// 设置按钮的位置

shareButton->setPosition(ccp(150, 180))

// 然后开发者需要将该按钮添加到游戏场景中

CCMenu* pMenu = CCMenu::create(shareButton, NULL)

pMenu->setPosition(CCPointZero)

this->addChild(pMenu, 1)

// ********************** 设置平台信息 ***************************

// CCUMSocialSDK *sdk = shareButton->getSocialSDK()

// sdk->setQQAppIdAndAppKey("设置QQ的app id", "appkey")

// sdk->setWeiXinAppId("设置微信和朋友圈的app id")

// sdk->setYiXinAppKey("设置易信和易信朋友圈的app id")

// sdk->setLaiwangAppInfo("设置来往和来往动态的app id",

// "设置来往和来往动态的app key", "我的应用名")

// sdk->setFacebookAppId("你的facebook appid")

// 设置用户点击一条图文分享时用户跳转到的目标页面, 一般为app主页或者下载页面

// sdk->setTargetUrl(" ")

// 打开或者关闭log

// sdk->setLogEnable(true)

// ********************** END ***************************

集成到这一步就完成了,如果没有异常,应该会出现下面的界面,这说明你已经成功实现了集成工作。

方法/步骤

我们要在场景中创建一个新的精灵。

打开HelloWorldScene.h。我们为HelloWorld增加一个精灵类成员指针

所在的层中开启触屏响应。我们以改拆HelloCpp为例,在HelloWorld的init函数中创建这个精灵

我们要启用场景所属层CCLayer响应触点功能。这一步是超级简单,只需要在创建精灵后加一行代码:setTouchEnabled(true) 这个函数是CCLayer类开启触屏响应功能的开关

为场景所属CCLayer增加相应的响应触点事件处理功能。 CCLayer层枯纯本身由CCTouchDelegate派生,CCTouchDelegate是触点消息响应接口类,它指定了CCLayer在响应触点事件时所触发的函数,其中单点触屏主要用于控件,如按钮,而多点触屏多用于场景

看一下这些接口,如果我们需要增加相应的触屏事件处理,只需要在CCLayer的派生类中重载这些接口函数就OK了。回到我们的HelloWorld场景,本节只需要用到移动跟随触屏位置,所以我核败枣们在其public部分增加函数重载:

virtualvoid ccTouchesBegan(CCSet*pTouches, CCEvent *pEvent)

运行一下,我们可以在按下鼠标时发现精灵始终跟随鼠标移动


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11995635.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存