cocos2dx 3.x(点击屏幕移动精灵,拖动精灵)不需要写回调函数

 1 //
 2 //  MainScene.cpp
 3 //  helloworld
 4 //
 5 //  Created by apple on 16/9/19.
 6 //
 7 //
 8
 9 #include "MainScene.hpp"
10 Scene * MainScene::createScene()
11 {
12      auto scene = Scene::create();
13     //创建层
14     MainScene *layer = MainScene::create();
15     scene->addChild(layer);
16     return scene;
17 }
18 bool MainScene::init(){
19     if (!Layer::init()) {
20         return false;
21     }
22
23
24     sprite = Sprite::create("hu.png");
25     sprite ->setPosition(50, 50);
26     sprite->setAnchorPoint(Vec2(0.5, 0.5));
27     this->addChild(sprite);// 添加到层
28
29
30
31     //声明
32     auto listener1 = EventListenerTouchOneByOne::create();
33     listener1->setSwallowTouches(true);
34
35     //通过 lambda 表达式 直接实现触摸事件的回掉方法
36     listener1->onTouchBegan = [](Touch* touch, Event* event){
37         auto target = static_cast<Sprite*>(event->getCurrentTarget());
38
39         Point locationInNode = target->convertToNodeSpace(touch->getLocation());
40         Size s = target->getContentSize();
41         Rect rect = Rect(0, 0, s.width, s.height);
42
43         if (rect.containsPoint(locationInNode))
44         {
45             log("sprite began... x = %f, y = %f", locationInNode.x, locationInNode.y);
46             target->setOpacity(180);//点击的时候精灵颜色变暗,255为最大值,0最小
47             return true;
48         }
49         return false;
50     };
51
52
53
54     listener1->onTouchMoved = [](Touch* touch, Event* event){
55         auto target = static_cast<Sprite*>(event->getCurrentTarget());
56         target->setPosition(target->getPosition() + touch->getDelta());
57     };
58
59     listener1->onTouchEnded = [=](Touch* touch, Event* event){
60         auto target = static_cast<Sprite*>(event->getCurrentTarget());
61         log("sprite onTouchesEnded.. ");
62         target->setOpacity(255);//手势松开时使精灵恢复原来的颜色
63     };
64
65
66     //将触摸事件绑定到精灵身上
67     _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, sprite);
68     _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite);
69     _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite);
70
71     return true;
72 }
时间: 2024-11-18 21:11:59

cocos2dx 3.x(点击屏幕移动精灵,拖动精灵)不需要写回调函数的相关文章

cocos2dx 3.x(精灵的碰撞检测,点击移动与拖动精灵)

1 // 2 // MainScene.hpp 3 // helloworld 4 // 5 // Created by apple on 16/9/19. 6 // 7 // 8 9 #ifndef MainScene_hpp 10 #define MainScene_hpp 11 12 #include <stdio.h> 13 #include "cocos2d.h" 14 USING_NS_CC; 15 using namespace cocos2d; 16 //定

创建3D模型/添加屏幕监听,点击屏幕时,精灵带有旋转的移动

 3D模型创建 //3D models auto model = Sprite3D::create("Sprite3DTest/boss1.obj"); model->setScale(4); model->setTexture("Sprite3DTest/boss.png"); model->setPosition3D(Vec3(s.width/2, s.height/2, 0)); addChild(model); EventListene

cocos2d-x 3.0 导演,场景,层,精灵

导演(Director) 一款游戏好比一部电影,只是游戏具有更强的交互性,不过它们的基本原理是一致的.所以在Cocos2dx中把统筹游戏大局的类抽象为导演(Director),Director是整个cocos2dx引擎的核心,是整个游戏的导航仪,游戏中的一些常用操作就是由Director来控制的,比如OpenGL ES的初始化,场景的转换,游戏暂停继续的控制,世界坐标和GL坐标之间的切换,对节点(游戏元素)的控制等,还有一些游戏数据的保存调用,屏幕尺寸的获取等都要由Director类来管理控制的

cocos2d-x项目101次相遇:使用触摸事件移动 精灵

cocos2d-x 101次相遇 / 文件夹 1   安装和环境搭建 -xcode 2   Scenes , Director, Layers, Sprites3   建立图片菜单 4   在HelloWorld上--建立新场景 5   添加一个精灵sprite 5.1   缩小sprite并使之完整显示6   action ,移动sprite 7   3.0 的点击事件,CCTouchDelegate已经停用了 8   使用触摸事件移动 精灵 void CMyFirstScene::onTou

cocos2d-x推断sprite点击

我们经常须要推断用户的点击操作是否落于某个sprite之上,进而让这个sprite做出响应. 可是假设我们通过继承CCSprite类来实现自己的Sprite类的时候,产生的视图尺寸会充满屏幕.多个Sprite在同一层的时候会发生重叠,导致我们通过回调函数传递进的touch点是相对于最上层Sprite来说的. 好在我们能够通过CCDirector::sharedDirector()->convertToGL(CCTouch* touch->locationInView());的方法来获得touc

仿腾讯新闻,点击屏幕重新加载的实现,直接贴代码

<pre class="java" name="code">package com.example.clicktoreload; import com.example.clicktoreload.ClickScreenToReload.Reload; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.view.M

android 点击屏幕关闭 软键盘

//点击屏幕 关闭输入弹出框 @Override public boolean onTouchEvent(MotionEvent event) { InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMetho

Cocos2d-x 3.0 点击交互的四种处理

1.概述 游戏也好,程序也好,只有能与用户交互才有意义.手机上的交互大致可以分为两部分:点击和输入.其中点击更为重要,几乎是游戏中全部的交互.在Cocos2d-x 3.0中,更改了dispatch机制.同时加入了两种新的交互形式:listener 和touchEvent回调.加上先前版本中的点击函数回调,与重写layer层的touch消息响应,构成了一个相对完整的交互模式.先上一张Demo的图: 2.四种点击 1.函数回调 函数回调是最简单的响应形式,一直以来被用于MenuItem中的点击处理.

unity3d点击屏幕选中物体

原文  http://blog.csdn.net/mycwq/article/details/19906335 前些天接触unity3d,想实现点击屏幕选中物体的功能.后来研究了下,实现原理就是检测从屏幕发出的射线与物体发生碰撞,而这个发生碰撞的物体就是你选中的物体. void MobilePick() { if (Input.touchCount != 1 ) return; if (Input.GetTouch(0).phase == TouchPhase.Began) { RaycastH