cocos 动画 触摸事件
来源:互联网 发布:新浪短网址api js 编辑:程序博客网 时间:2024/05/01 07:14
动画与触摸
动画
动画分为两部分 animation 与 animate
将动画类比为连环画,则 animation相当于造书的过程而 animate则为快速翻书的动作 通常会再添加一个repeateForever的动作,确保动画一直继续下去
1️⃣animation 首先创建精灵帧缓存,然后将许多图片合成一张大图片与plist文件,加入缓存中
// 创建获取精灵帧缓存
auto cache = SpriteFrameCache::getInstance();
// 从文件中读取精灵帧,加入精灵帧缓存中
cache->addSpriteFramesWithFile("fish.plist","fish.png");
2️⃣然后创建一个容器用来存放animation,即将一页页的图片放入建册成书
Vector<SpriteFrame *>vec; // 创建一个容器
char str[20]; // 用来保存图片名称
for (int i=1; i<22; i++) {
// 将图片名称保存到str中
sprintf(str, "fish_%d.png",i);
// 通过图片名获取精灵帧
auto frame = cache->getSpriteFrameByName(str);
// 将获取的精灵帧加入容器
vec.pushBack(frame);
}
// 通过容器vec创建动画
auto animation = Animation::createWithSpriteFrames(vec);
// 设置帧间隔
animation->setDelayPerUnit(0.1);
3️⃣然后就是根据连环画书创建animate动作
auto animate = Animate:: create(animation);// 通过动画创建动作
4️⃣设置首页 开始动画
// 通过精灵帧创建精灵sp
auto fream = cache->getSpriteFrameByName("fish_1.png");
auto sp = Sprite::createWithSpriteFrame(fream);
// 精灵的常见设置
sp->setPosition(480, 320);
addChild(sp);
sp->runAction(repate);
触摸
触摸动作的实现(多点触摸基本类似)
1️⃣首先要重写父类的触摸事件
//重写Layer的四个触摸事件的函数(不是必须全部重写,但第一个必须要写,因为在触摸开始的基础上才会有后续的动作,哪怕它为空)
virtual bool onTouchBegan(Touch *touch, Event *unused_event)override;
virtual void onTouchMoved(Touch *touch, Event *unused_event)override;
virtual void onTouchEnded(Touch *touch, Event *unused_event)override;
virtual void onTouchCancelled(Touch *touch, Event *unused_event)override;
2️⃣在init函数中设置监听器与事件分发器
// auto listener = EventListenerTouchAllAtOnce::create(); 多点触摸的监听
// 创建一个单点触摸的监听
auto lisstener = EventListenerTouchOneByOne::create();
// 指定监听的触摸事件的回调函数
lisstener->onTouchBegan = CC_CALLBACK_2(touchTest::onTouchBegan, this);// this表示layer层
lisstener->onTouchMoved= CC_CALLBACK_2(touchTest::onTouchMoved, this);
lisstener->onTouchEnded= CC_CALLBACK_2(touchTest::onTouchEnded, this);
lisstener->onTouchCancelled= CC_CALLBACK_2(touchTest::onTouchCancelled, this);
// 获取事件分发器
auto dispatcher = Director::getInstance()->getEventDispatcher();
// 用事件分发器 设置监听器与监听的对象
// 注意:一个监听器只能监听一个对象,可以使用克隆方法,类似于action的克隆 lisstener->clone()
dispatcher->addEventListenerWithSceneGraphPriority(lisstener, this);
3️⃣重写触摸事件(实现)
void touchTest:: onTouchMoved(Touch *touch, Event *unused_event){
// 获取触发触摸事件的目标
auto target =dynamic_cast<Sprite *>(unused_event->getCurrentTarget());
// 获得当前触摸点的位置
auto point = touch->getLocation();
// 获取上一次函数调用时的触摸点的位置
auto prepoint = touch->getPreviousLocation();
// 获取触摸对象的Rect
auto rect = target->getBoundingBox();
if(rect.containsPoint(prepoint)){
// 目标随着触摸点的移动而移动
target->setPosition(point);
//
}
}
思考:触摸事件与按钮绑定事件的区别与联系
不同:按钮可以跳转场景,在两个场景间操作,而触摸事件更多强调的是在当前场景下的操作,
触摸是否继承自按钮动作
- cocos 动画 触摸事件
- cocos-js触摸事件
- cocos lua 3.0 触摸事件
- cocos creator 触摸捕捉事件
- cocos lua 注册触摸事件
- cocos-js 3.8 控件触摸事件处理
- cocos creator触摸事件 cc.node.EventType
- cocos中的触摸事件 、lambda表达式
- cocos 触摸双击事件的实现
- cocos触摸
- COCOS-3.X事件分发机制-触摸事件
- cocos creator学习(七)触摸和键盘事件总结
- cocos layer触摸事件不响应的问题
- android 触摸事件冒泡动画效果
- 第四讲 动画与触摸事件
- cocos动画
- Cocos动画
- cocos 动画
- 百度地图调用报错Uncaught TypeError:Cannot read property 'fc' of undefined
- 魔术师发牌问题
- poj 3468 A Simple Problem with Integers
- 文件上传Upload
- $(window).load(function(){}) 和 $(document).ready(function(){})的区别
- cocos 动画 触摸事件
- Servlet
- Sequence小文件合并
- Java transient关键字使用小记
- 几个简单的博弈例子
- 【学习笔记】第八章 多态
- 文章标题
- Python 列表解析
- Eclipse 如何调整java和xml文件字体大小