#pragma once
#include "cocos2d.h"
#include "ShopScene.h" using namespace cocos2d; class ChooseScene : public Layer
{
public:
static Scene* createScene();
virtual bool init();
void menuCloseCallback(Ref* pSender);CREATE_FUNC(ChooseScene);
public:
bool onTouchBegan(Touch* touch, Event* event);
void onTouchMoved(Touch* touch, Event* event);
void onTouchEnded(Touch* touch, Event* event);
Point diff_2;
Point diff_1; float bg_width_max;
float bg_width_min;
Sprite* cocosImage;
}; cpp
#include "ChooseScene.h"
USING_NS_CC; Scene* ChooseScene::createScene()
{
auto scene = Scene::create();
auto layer = ChooseScene::create();
scene->addChild(layer);return scene;
} bool ChooseScene::init()
{
if ( !Layer::init() )
{return false;} Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin();
bg_width_max = 6500; // 背景全然出现 最大X
bg_width_min = 1024; // 最小X background_init();
return true;
} void ChooseScene::background_init()
{
cocosImage = Sprite::create("ChooseScene/map.png");
cocosImage->setAnchorPoint(Point(1, 0)); ///锚点 1,0 图片的右下角
cocosImage->setPosition(Point(1024, 0)); // 屏幕是 1024 768 锚点是1,0 所以所有显示在屏幕上 x 位置 是1024
this->addChild(cocosImage, 1, 1); auto listener_1 = EventListenerTouchOneByOne::create(); //加入监听事件
listener_1->setSwallowTouches(true);
listener_1->onTouchBegan = CC_CALLBACK_2(ChooseScene::onTouchBegan, this);
listener_1->onTouchMoved = CC_CALLBACK_2(ChooseScene::onTouchMoved,this);
listener_1->onTouchEnded = CC_CALLBACK_2(ChooseScene::onTouchEnded,this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener_1, this);
} bool ChooseScene::onTouchBegan(Touch* touch, Event* event) // 假设有触摸范围的话 能够再这里加入一个
{
// auto beginPoint = touch->getLocation();
// if (touch_bg.containsPoint(beginPoint)) /////touch_bg 是point
// {
// return true;
// }
return true;
} void ChooseScene::onTouchMoved(Touch* touch, Event* event)
{
if (cocosImage->getPositionX() >= bg_width_min && cocosImage->getPositionX() <= bg_width_max) //推断 是不是在 规定的范围内
{
diff_2 = touch->getDelta();
auto currentPos = cocosImage->getPosition();
cocosImage->setPosition(currentPos.x + diff_2.x, currentPos.y);
}
if (cocosImage->getPositionX() > bg_width_max) // 最左边 //当移动到最左边的时候 返回最大范围
{
cocosImage->setPosition(bg_width_max, cocosImage->getPositionY());
}
if (cocosImage->getPositionX() < bg_width_min) /// 最右边 同上
{
cocosImage->setPosition(bg_width_min, cocosImage->getPositionY());
}
} void ChooseScene::onTouchEnded(Touch* touch, Event* event)
{
if (diff_1.x == diff_2.x) //推断 上次触摸点与这次触摸点 是否不同 假设同样 地图不进行移动
{
return;
} diff_1 = diff_2; //保留这次移动參数 float pm = 0;
if (diff_1.y > 0)
{
pm = 1;
}
else
{
pm = -1;
} if (cocosImage->getPositionX() >= bg_width_min - pm * 180
&& cocosImage->getPositionX() <= bg_width_max - pm * 180) /// 滑动边界推断 最大范围
{
if (abs(diff_1.x)>=30)
{
if (diff_1.x >0)
{
auto move_x = MoveTo::create(0.8f, Point(cocosImage->getPositionX() + 180,
cocosImage->getPositionY())); cocosImage->runAction(move_x);
}
else
{
auto move_x = MoveTo::create(0.8f, Point(cocosImage->getPositionX() - 180,
cocosImage->getPositionY())); cocosImage->runAction(move_x);
} } }
if (cocosImage->getPositionX() >= bg_width_min - pm * 50
&& cocosImage->getPositionX() <= bg_width_max - pm * 50) //边界推断 最小距离
{
if (abs(diff_1.x) < 30)
{
if (diff_1.x >0)
{
auto move_x = MoveTo::create(0.5, Point(cocosImage->getPositionX() + 50,
cocosImage->getPositionY())); cocosImage->runAction(move_x);
}
else
{
auto move_x = MoveTo::create(0.5, Point(cocosImage->getPositionX() - 50,
cocosImage->getPositionY())); cocosImage->runAction(move_x);
} }
}
}

ScrollView 的滑动的时候 有两个效果 

1.移动到规定范围后 会弹回去。可是会看到范围外的图片。
2.不会有弹动效果,拖动到规定范围之后。将不能拖动。
所以 这段代码实现了 在没有出规定范围的时候 有滑动效果。

而且不会出现范围以外的图片地区。

移动的时候 使用setpostion 移动结束后 添加一个动作 
。起到了一个缓冲的惯性。这个横屏实例。竖屏 參照这个 改动參数就可以。

cocos2d-x 3.0 游戏关卡滑动 弹动 不会出现黑边效果的更多相关文章

  1. Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/musicvs/article/details/25368273 好吧.我真心全然搞不懂.我如今仅仅只 ...

  2. [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 004.[HoldTail]主角的上下飞行跟移动

    cocos2d-x 3.0游戏开发xcode5帅印博客教学 004.[HoldTail]主角的上下飞行跟移动 写给大家的前言,在学习cocos2d-x的时候自己走了很多的弯路,也遇到了很多很多问题,不 ...

  3. [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面

    cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面 写给大家的前言,在学习cocos2d-x的时候自己走了很多的弯路,也遇到了很多很多问题,不 ...

  4. cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写下

    上篇文章写了Paddle类来处理精灵的点击.触摸事件,现在我们在Paddle的基础上 写一个MyPaddle类,来处理上一关.下一关.开始游戏按钮的点击事件. 1.类声明如下: class MyPad ...

  5. Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物

    如今我们有2种类型的怪物,并且创建的时候是写死在代码里的,这是要作死的节奏~ 所以.必须可配置.不然会累死人的. ; i < size; ++i) { int id = root[i][&quo ...

  6. Cocos2d-x3.0游戏实例《不要救我》第一章——前言

    我们可以学习? 这是一个非常easy游戏.但更多的东西用(对于初学者).至少,对于它的一个例子,有点多. 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www.benm ...

  7. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第六步---炮台&amp;点击炮台加入英雄&amp;英雄升级

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写,第一别全然照搬代码:第二能够说 ...

  8. 【转】UGUI(小地图的实现)与游戏关卡选择的简单实现

    http://www.jianshu.com/p/68637029e9df 游戏中小地图的实现(场景用简单Cube组成先搭建如下图场景,真实场景实现方法也是一样) 图1-1小地图效果图 1.创建好场景 ...

  9. 2、Cocos2dx 3.0游戏开发找小三之引擎简单介绍

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 引擎简单介绍 Cocos2d-x 的 ...

随机推荐

  1. Hexo页面优化和音乐的心得

    灵感 这两天在添加“留言”以及“关于”页面,准备先简单设计一下自已的页面.留言页面可以放置一些自已比较感兴趣的音乐.以及一些JS特效,再集成一个第三方的留言功能.关于页面可以放置一些简单的联系方式.以 ...

  2. PHP解析XML格式文档

    <?php// 首先要建一个DOMDocument对象$xml = new DOMDocument();// 加载Xml文件$xml->load("3.xml");// ...

  3. 洛谷 P1244 青蛙过河

    P1244 青蛙过河 题目描述 有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图所示.n只青蛙要过 ...

  4. linux杂谈(十八):DNSserver的配置(一)

    1.DNSserver简单介绍 域名系统(英文:Domain Name System,縮寫:DNS)是因特网的一项服务. 它作为将域名和IP地址相互映射的一个分布式数据库,可以使人更方便的訪问互联网. ...

  5. opencms9.0安装

    今天安装opencms 9.0遇到了一些问题,因为是初次安装和使用,导致耽误了非常多时间.所以在此记录一下以备以后借鉴. 首先附上安装步骤链接: http://www.51testing.com/ht ...

  6. 比MD5 和HMAC还要安全的加密 - MD5 加时间戳

    //1.给一个字符串进行MD5加密 NSString *passKey = @"myapp"; passKey = [passKey md5String]; //2.对第一步中得到 ...

  7. linux 进程等待 wait 、 waitpid

    waitpid() 与 wait() 功能相似,都是用户主进程等待子进程结束或中断. 可用于进程之间的同步 wait 函数原型 pid_t wait(int *status); 函数说明 wait() ...

  8. js关于循环的理解

    学习任何语言都离不开循环,js也是一样,看了网上的资料,整理一份关于js循环的理解. 1.最基础循环,js和其他高级语言一样使用for.while循环 (function() { for(var i= ...

  9. WinRAR 5.21 去弹窗 疑惑

    WinRAR 突然就有弹窗广告了 ,找了个方法,重新写一下安装目录下的 rarreg.key,确实有效果但是重写的和之前的完全一样啊,至少在文本中完全一样,怎么回事. 下面附上两个文件, 1.key ...

  10. MathType下载和安装(与Visio搭配使用)

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...