#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. UESTC 360 Another LCIS

    Another LCIS Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on UESTC. Original ...

  2. LeetCode 223 Rectangle Area(矩形面积)

    翻译 找到在二维平面中两个相交矩形的总面积. 每一个矩形都定义了其左下角和右上角的坐标. (矩形例如以下图) 如果,总占地面积永远不会超过int的最大值. 原文 分析 这题前天试过,写了一堆推断.终究 ...

  3. Cocos2d-x怎样控制动作速度

    基本动作和组合动作实现了针对精灵的各种运动和动画效果的改变.但这种改变速度匀速的.线性的.通过ActionEase及其的派生类和Speed 类我们能够使精灵以非匀速或非线性速度运动,这样看起了效果更加 ...

  4. thinkphp中 Illegal offset type异常

    thinkphp中 Illegal offset type异常 一.错误提示 二.解决思路 1.看出错提示中的函数为assign函数,那说明是我们在从控制器assign数据到页面的部分出现了错误 2. ...

  5. Scott Hanselman的问题-2

    .Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)   昨天回答了Scott Hanselman在他清单上关于C#那部分的题目,.Net 程序员面试 C# 语言篇 (回 ...

  6. 39.C语言操作数据库

    一.准备工作: sqlite3工具集:链接:https://pan.baidu.com/s/1mjufXZa 密码:2ui7 安装步骤: 打开如下文件夹,找到sqlite3.dll,并放入系统目录 2 ...

  7. 洛谷P1976 鸡蛋饼

    题目背景 Czyzoiers 都想知道小 x 为什么对鸡蛋饼情有独钟.经过一番逼问,小 x 道出 了实情:因为他喜欢圆. 题目描述 最近小 x 又发现了一个关于圆的有趣的问题:在圆上有2N 个不同的点 ...

  8. Android实现QQ分享及注意事项

    一.获取APPID和帮助文档 在前面我介绍了关于Android中微信分享的文章< Android实现微信分享及注意事项>这一篇文章来看看关于QQ分享. 可以参看新手引导和接入说明:http ...

  9. Linux下截图技巧

           在需要Linux显示图片的场合,最普通的方法,会考虑用数码相,或是用Vmware,或VPc来抓拍,这样以来会比较麻烦,Linux也自带了些工具例如Gimp,ksnapshot这里我介绍一 ...

  10. [ Java ] [ Eclipse ] 加速 Eclipse 載入速度-轉載

    加速 Eclipse 載入速度-轉載 https://read01.com/NJjNOB.html