cocos2d_x_03_常用类的使用_事件_绘图

cocos2d_x_03_常用类的使用_事件_绘图,第1张

概述一、TextFieldTTF输入框的使用 #pragma mark - 自定义方法// 自定义方法,添加一个 TextFieldvoid TextFieldScene::addOneTextField(float x,float y){ TextFieldTTF *field = TextFieldTTF::textFieldWithPlaceHolder("请输入:","宋体", 一、TextFIEldTTF输入框的使用

#pragma mark - 自定义方法// 自定义方法,添加一个  TextFIEldvoID TextFIEldScene::addOneTextFIEld(float x,float y){    TextFIEldTTF *fIEld = TextFIEldTTF::textFIElDWithPlaceHolder("请输入:","宋体",50);    fIEld->setposition(x,y);    // 添加精灵到当前 Layer    this->addChild(fIEld);        // 2、实例化一个触摸监听器 对象    auto Listener = EventListenertouchOneByOne::create();    // 当触摸开始时,绑定一个闭包函数;    // 【】表示 要传入的外界对象,此处是fIEld    // ()表示参数    Listener->ontouchBegan = [fIEld](touch *t,Event *e){        // getLocation 返回一个OpenGL坐标        // 如果点击的点,在textFIEld上,才允许输入    if (fIEld->getBoundingBox().containsPoint(t->getLocation())) {            fIEld->attachWithIME();        }else{            fIEld->detachWithIME();        }        return false;    };    // 3、获取事件分发器,添加一个事件监听器,到this身上;即监听的是fIEld对象【文本输入框】    Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(Listener,fIEld);    }


二、自定义类Ball,继承自Sprite Ball.h CREATE_FUNC(type)宏 Ball.cpp init方法的实现 在主场景中使用自定义类,创建实例对象 可以是在onEnter()方法,也可以在init() 方法 三、Cocos2d-x的内存管理 引用计数 reference count 推荐:使用时,先retain,使用完release 不建议:delete 简化 *** 作:创建完毕后,使用autorelease(); 四、菜单的使用
第1种方式:设置 回调函数 为 闭包函数,它属于c++11最新特性 菜单项的 回调函数类型 定义如下: 第2种方式:设置 菜单项 的回调方法,通过宏 CC_CALLBACK_1宏 .h文件中的回调方法声明 .cpp文件中回调方法的实现 五、tableVIEw的使用 导入cocos2d-x扩展头文件,里面有CCtableVIEw.h 场景继承自datasouce和delegate 下面是数据源的方法声明 下面是tableVIEw代理的声明 实例化一个tableVIEw 整个场景的完整的头文件 整个场景的方法实现.cpp文件
////  tableVIEwScene.cpp//  01_cocos2d-x////  Created by beyond on 14-10-4.#include "tableVIEwScene.h"Scene* tableVIEwScene::createScene(){    // 'scene' 自动释放    // 创建一个scene    auto scene = Scene::create();        // 'layer' 自动释放    auto layer = tableVIEwScene::create();    // 将图层 添加到场景中    scene->addChild(layer);    // 返回 填充好图层的 场景    return scene;}// 在 "init" 方法中,实例化自己要用的精灵对象bool tableVIEwScene::init(){    // 1. 调用父类的init,cpp 没有super,直接写父类名    if ( !Layer::init() ) return false;    // 屏幕尺寸    winSize = Director::getInstance()->getVisibleSize();        // 添加一个tablevIEw    Size size = Size(300,300);    tableVIEw *tv = tableVIEw::create(this,size);    // 设置锚点    tv->setAnchorPoint(Point(0,0));    // 设置位置    tv->setposition(winSize.wIDth/2,winSize.height/2);    // 设置代理    tv->setDelegate(this);    // 添加到this    addChild(tv);            return true;}#pragma mark - 数据源方法// 下面全是数据源方法// 共有多少行ssize_t tableVIEwScene::numberOfCellsIntableVIEw(tableVIEw *table){    return 7;}// 每一行的尺寸Size tableVIEwScene::tableCellSizeforIndex(tableVIEw *table,ssize_t IDx){    return Size(300,60);}// 每一行的celltableVIEwCell* tableVIEwScene::tableCellAtIndex(tableVIEw *table,ssize_t IDx){    // 重用机制,先从缓存池中取,取不到再创建    tableVIEwCell *cell = table->dequeueCell();        LabelTTF *label;    if (cell==NulL) {        // 创建一个cell        cell = tableVIEwCell::create();        // 创建一个新的label        label = LabelTTF::create();        // 绑定标记        label->setTag(5267);        // 设置字体大小        label->setFontSize(30);        // 设置锚点        label->setAnchorPoint(Point(0,0));        // 添加到cell        cell->addChild(label);    }else{        // 直接取出cell里面的 label,重新赋值        label = (LabelTTF*)cell->getChildByTag(5267);    }    std::string arr[] = {"宝玉","黛玉","宝钗","湘云","探春","妙玉","晴雯"};    // 设置label内容    label->setString(StringUtils::format("Label %ld,%s",IDx,arr[IDx].c_str()));    // 返回独一无二的cell    return cell;    }#pragma mark - 代理 方法//下面全是代理方法// 点击时调用voID tableVIEwScene::tableCelltouched(tableVIEw* table,tableVIEwCell* cell){    LabelTTF *label = (LabelTTF*)cell->getChildByTag(5267);    std::string content = StringUtils::format("点击了第n行,内容是:%s",label->getString().c_str());    MessageBox(content.c_str(),"标题");}


重点是
StringUtils::format();<span ><strong>方法</strong></span>
<span ><strong>返回的是std::string对象,可以通过c_str()</strong></span><span >方法转成c字符串</span>
重点是:重用机制 tableCelltouched 相当于iOS中的dIDSlectedRowAtIndexPath 六、场景切换 效果图: 场景.h头文件 场景.cpp类实现 添加一个LabelTTF,内容是空白字符串,监听点击事件,进行场景切换 七、动作Action
// 创建一个监听器对象auto Listener = EventListenertouchOneByOne::create();// 监听方法 用闭包函数实现Listener->ontouchBegan = [label](touch *t,Event *e){    // 只有点击的位置在label身上,才响应监听事件    if (label->getBoundingBox().containsPoint(t->getLocation())) {        // 绝对,相对        label->runAction(Moveto::create(1,Point(100,100)));        label->runAction(MoveBy::create(1,Point(-50,-50))->reverse());        // 同时并发执行 Spawn        label->runAction(Spawn::create(MoveBy::create(1,100)),RotateBy::create(1,360),NulL));                label->runAction(Sequence::create(MoveBy::create(1,NulL));                // 顺序执行 Sequence        label->runAction(Sequence::create(                                          MoveBy::create(1,// 闭包函数,实现 动作的侦听                                          CallFunc::create([](){            // 动作完成时,d出 对话框            MessageBox("Action complete","Title");        }),NulL));    }        return false;};// 向事件分发器 注册一个事件侦听器,侦听发生在label身上的事件Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(Listener,label);


八、逐帧动画 首先,下载Flash_Professional_13_LS20.dmg,约1G左右 按下面方法,运行补丁 打开Flash,打开【 库library】,点击左下角的新建按钮 新建一个Symbol,类型选择【影片剪辑MovIE Clip】; 在第1帧先画一个正方形,按F6在第20帧创建一个关键帧; 并在第20帧 删除原来的正方形,画一个圆形; 在上面两个关键帧之间的任意一帧,右击,创建一个【形变补间动画shape tween】 最后,重点,导出为cocos2d用的大纹理+PList文件 点击库,右击刚才创建的影片剪辑【movIE clip】,选择【Generate Sprite Sheet】,data format选择【cocos2D v3】,选择【Export导出】 这时,生成了pList文件+一个大纹理图片,如下所示 pList文件 精灵帧缓存、纹理缓存、SpriteBatchNode三者的关系
////  FrameAnimateScene.cpp//  01_cocos2d-x////  Created by beyond on 14-10-4.////#include "FrameAnimateScene.h"USING_NS_CC;Scene* FrameAnimateScene::createScene(){    // 'scene' 自动释放    // 创建一个scene    auto scene = Scene::create();        // 'layer' 自动释放    auto layer = FrameAnimateScene::create();    // 将图层 添加到场景中    scene->addChild(layer);    // 返回 填充好图层的 场景    return scene;}// 在 "init" 方法中,实例化自己要用的精灵对象bool FrameAnimateScene::init(){    // 1. 调用父类的init,直接写父类名    if ( !Layer::init() ) return false;    // 屏幕尺寸    winSize = Director::getInstance()->getVisibleSize();        // 2.添加一个精灵,播放帧动画    this->addSpriteFrameAniamtion();    return true;}#pragma mark - 自定义方法// 2.添加一个精灵,播放帧动画voID FrameAnimateScene::addSpriteFrameAniamtion(){    // 精灵帧缓存 单例    auto cache = SpriteFrameCache::getInstance();    // 【精灵帧缓存】会根据pList中的key,到大纹理相册中,切割并加载 小的精灵帧,放入帧缓存中,以后只需 根据 小图片名,从【精灵帧缓存】中取出小精灵帧即可    cache->addSpriteFramesWithfile("anim.pList");        // 容器,数组,里面存放的是精灵帧    Vector<SpriteFrame*> vec;    // 用来生成小精灵帧的图片名    char name[15];    // 用0清空内存    memset(name,15);    // 从帧缓存中取出所有的小精灵帧,放入Vector    for (int i=0; i<20; i++) {        // 格式化name,%04d,表示 不足四位 用填充        sprintf(name,"anim%04d",i);        // 将小精灵帧  加入容器        vec.pushBack(cache->getSpriteFrameByname(name));    }    // 创建 Animation    Animation *animation = Animation::createWithSpriteFrames(vec,0.1f);    // 创建 Animate    Animate *animate = Animate::create(animation);    // 创建精灵    auto sprite = Sprite::create();    // 添加到 this    addChild(sprite);    // 设置位置    sprite->setposition(200,200);    // 执行序列帧动画    Sequence *seq = Sequence::create(animate,animate->reverse(),NulL);    sprite->runAction(RepeatForever::create(seq));}


九、事件的传递 Listener->ontouchBegan方法中,返回的bool值 决定了 ontouchmove方法是否能够被触发 ontouchBegan方法,返回值是bool,参数:touch *t,Event *e
其中,参数Event *e中, e->getCurrentTarget() 得到的是被点击的对象,即 向事件分发器中注册Listener时,绑定的Node对象 此外,只要是Node都可以监听事件

多点触摸

OneByOne是单点触摸】【AllAtOnce是多点触摸】

加速计事件

1、必须先 允许加速计事件

2、事件类型 是【EventListeneracceleration 关于加速计的方向x y z
当手机竖着,x方向的加速值,约等于0 当手机向右倾斜,增加
当手机完全向右倾斜,约等于+1.0
当手机向左倾斜,减小
当手机完全向左倾斜,约等于-1.0

侦听 AndroID菜单键返回键

事件类型是【EventListenerKeyboard

闭包函数的参数1:键盘码,其中,菜单键是【4199,返回键是【8】


十、绘图API 效果图: Node类有一个虚方法draw(),只要覆写,就可以绘制自己的Node 自定义类,继承自Node
draw()方法中,主要使用到的类是【 DrawPrimitives DrawPrimitives类绘制图形,但已经过期~
在draw()方法中绘制 矩形 在draw()方法中绘制 填充矩形SolIDRect

在draw()方法中绘制 圆形

圆心 半径 角度360 segment50 true表示要连接一根线到圆心

注意 4个参数 segment 3 ,其实是画一个三角形;当为50段时,就比较接近圆了

计算机 其实 无法直接画圆,就是当分段数目segment趋近无穷大时,就接近于圆了

在draw()方法中绘制 填充圆形 SolID
在draw()方法中绘制 多边形 顶点数组
在draw()方法中绘制 填充多边形
画直线
画点
总结

以上是内存溢出为你收集整理的cocos2d_x_03_常用类的使用_事件_绘图全部内容,希望文章能够帮你解决cocos2d_x_03_常用类的使用_事件_绘图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址:https://54852.com/web/1000137.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存